为啥 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 错误? [复制]
当列是现有列的布尔测试时,为啥向 Pandas DataFrame 添加列会返回 SettingWithCopy 警告?