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

时间:2018-02-16 00:15:04

标签: python pandas csv numpy warnings

我有一组保存在磁盘上的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文件的正确方法是什么?

非常感谢任何有关警告的见解......

3 个答案:

答案 0 :(得分:4)

这是获得与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'])

答案 1 :(得分: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')

答案 2 :(得分:0)

在此讨论中,似乎numpy中有一个流浪警告,表明开发人员要删除:https://github.com/numpy/numpy/issues/6784

我的猜测(没有深入研究pandas源代码)是,pandas首先询问0是否是列名(也许是0 in df.columns或其他名称),并且然后在查询返回0时退回到使用False作为索引。

希望numpy会删除警告,或者pandas将来会调整其逻辑。