我有一个带字符串类型(对象)列的常规DataFrame。当我尝试使用等效的WHERE子句过滤列时,当我使用点表示法时,我得到KeyError
。在括号表示法中,一切都很好。
我指的是这些说明:
df[df.colA == 'blah']
df[df['colA'] == 'blah']
第一个给出了等效的
KeyError:False
不发布示例,因为我无法在为说明目的而构建的定制DataFrame上重现该问题:当我这样做时,两个符号都会产生相同的结果。
然后询问两者之间是否存在差异以及原因。
答案 0 :(得分:3)
点符号只是访问标准括号的便捷快捷方式。值得注意的是,当列名称类似sum
已经是DataFrame方法时,它们不起作用。我敢打赌,你的真实例子中的列名正在遇到这个问题,所以它与括号选择一起工作正常,但是测试方法是否等于'blah'
。
下面的简单示例:
In [67]: df = pd.DataFrame(np.arange(10).reshape(5,2), columns=["number", "sum"])
In [68]: df
Out[68]:
number sum
0 0 1
1 2 3
2 4 5
3 6 7
4 8 9
In [69]: df.number == 0
Out[69]:
0 True
1 False
2 False
3 False
4 False
Name: number, dtype: bool
In [70]: df.sum == 0
Out[70]: False
In [71]: df['sum'] == 0
Out[71]:
0 False
1 False
2 False
3 False
4 False
Name: sum, dtype: bool