Python 带点对括号列选择的dataframe where子句

Python 带点对括号列选择的dataframe where子句,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个带有字符串类型(对象)列的常规数据帧。当我尝试使用WHERE子句的等效项对列进行过滤时,当我使用点表示法时,我会得到一个KeyError。用括号表示时,一切正常 我指的是这些指示: df[df.colA == 'blah'] df[df['colA'] == 'blah'] 第一种方法相当于 KeyError:错误 不发布示例,因为我无法在为说明目的而构建的定制数据框架上重现问题:当我发布示例时,两个符号产生相同的结果 然后询问两者之间是否存在差异以及原因 与标准括号相比,点符号只是一

我有一个带有字符串类型(对象)列的常规数据帧。当我尝试使用WHERE子句的等效项对列进行过滤时,当我使用点表示法时,我会得到一个
KeyError
。用括号表示时,一切正常

我指的是这些指示:

df[df.colA == 'blah']
df[df['colA'] == 'blah']
第一种方法相当于

KeyError:错误

不发布示例,因为我无法在为说明目的而构建的定制数据框架上重现问题:当我发布示例时,两个符号产生相同的结果


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

与标准括号相比,点符号只是一种方便的快捷方式。值得注意的是,当列名类似于已经是数据帧方法的
sum
时,它们不起作用。我敢打赌,您的真实示例中的列名遇到了这个问题,因此它可以很好地处理括号选择,但在其他方面测试方法是否等于
“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

请注意,该列名为
size
。我强烈建议您养成使用方括号而不是点符号访问列的习惯,点符号访问df的属性,并将首先查找第一类属性和方法,然后查找列(如果存在)。它非常容易出错,并且会导致奇怪的错误