pandas dataframe where子句与点与括号列选择

时间:2016-12-08 00:55:47

标签: python pandas dataframe

我有一个带字符串类型(对象)列的常规DataFrame。当我尝试使用等效的WHERE子句过滤列时,当我使用点表示法时,我得到KeyError。在括号表示法中,一切都很好。

我指的是这些说明:

df[df.colA == 'blah']
df[df['colA'] == 'blah']

第一个给出了等效的

  

KeyError:False

不发布示例,因为我无法在为说明目的而构建的定制DataFrame上重现该问题:当我这样做时,两个符号都会产生相同的结果。

然后询问两者之间是否存在差异以及原因。

1 个答案:

答案 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