为啥 pandas read_csv 会发出此警告? (元素比较失败)

Posted

技术标签:

【中文标题】为啥 pandas read_csv 会发出此警告? (元素比较失败)【英文标题】:Why pandas read_csv issues this warning? (elementwise comparison failed)为什么 pandas read_csv 会发出此警告? (元素比较失败) 【发布时间】:2018-07-26 20:45:16 【问题描述】:

我有一组 LED 数据保存在磁盘 (led.csv) 上,如下所示:

 , LEDC1, LEDC2, LEDC3
0, 54859, 11349, 56859
1, 54850, 12135, 56890
2, 54836, 12400, 56892
3, 54840, 15725, 56897
4, 54841, 19038, 56896
5, 54837, 21232, 56911
.,  ... ,  ... ,  ...

我正在使用 pandas read_csv 函数从 .csv 读取这些数据:

data = pd.read_csv("Data/led.csv", index_col=0)

向此函数提供 index_col 参数会发出以下 (numpy) 警告:

C:\Program Files\Python\lib\site-packages\numpy\lib\arraysetops.py:466: 
FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
mask |= (ar1 == a)

使用 Pandas 读取具有现有索引的 .csv 文件的正确方法是什么?

非常感谢您对警告的任何见解...

【问题讨论】:

我尝试用随机数读取文件,将此数字设置为 id。它一直有效,直到 1.000.000 个数字,在 1.000.001 我有这个错误。 【参考方案1】:

这是获得与 index_col = 0 相同的结果但没有警告的一种方法。不过,这可能不是最简洁的方式:

data = pd.read_csv("Data/led.csv")
data.set_index([data.columns.values[0]], inplace=True)
data.index.names = [None]

This is a great post 显示错误类型,在其下方,solution 用于命名列,例如 index_col=['0'])

【讨论】:

【参考方案2】:

我不确定您出现错误的确切原因,但我猜测如果您的索引列中有数字和非数字数据,它可能会发生。然后numpy 在尝试检查索引是否有序时会感到困惑。

可能的黑客攻击:

data = pd.read_csv("Data/led.csv")

# assuming first column is named '0'
data['0'] = data['0'].astype(int).fillna(0)
data = data.set_index('0')

【讨论】:

【参考方案3】:

从这个讨论来看,numpy 中似乎有一个开发人员想要删除的杂散警告:https://github.com/numpy/numpy/issues/6784

我的猜测(没有深入研究pandas 源代码)是pandas 首先询问0 是否是列名(可能带有0 in df.columns 或其他东西),然后回退到使用0当该查询返回 False 时作为索引。

希望numpy 将删除警告或pandas 将在未来调整其逻辑。

【讨论】:

以上是关于为啥 pandas read_csv 会发出此警告? (元素比较失败)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Pandas 在 read_csv 时会导致 ZeroDivisionError

为啥在指定编码 utf-8 时 pandas read_csv 会出现 unicode 错误? [复制]

为啥 GCC 不对无法访问的代码发出警告?

为啥android在使用小于12sp的尺寸时会发出警告?

当列是现有列的布尔测试时,为啥向 Pandas DataFrame 添加列会返回 SettingWithCopy 警告?

在 Pandas 中使用 Scipy 发出警告