Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列索引器(Pandas)中的布尔表达式&x27;是';操作员不工作_Python_Python 2.7_Pandas_Indexing - Fatal编程技术网

Python 列索引器(Pandas)中的布尔表达式&x27;是';操作员不工作

Python 列索引器(Pandas)中的布尔表达式&x27;是';操作员不工作,python,python-2.7,pandas,indexing,Python,Python 2.7,Pandas,Indexing,当我使用: df = data2analyse.loc[data2analyse.bool_var1 | data2analyse.bool_var2 | data2analyse.bool_var3, 'some column'] 工作正常。但是如果我使用 df = data2analyse.loc[data2analyse.bool_var1 is True | data2analyse.bool_var2 is True |

当我使用:

df = data2analyse.loc[data2analyse.bool_var1 | data2analyse.bool_var2 |
                          data2analyse.bool_var3, 'some column']
工作正常。但是如果我使用

df = data2analyse.loc[data2analyse.bool_var1 is True | data2analyse.bool_var2 is True |
                          data2analyse.bool_var3 is True, 'some column']
引发
KeyError:False
异常。另外,如果我使用

df = data2analyse.loc[data2analyse.bool_var1 == True | data2analyse.bool_var2 == True |
                              data2analyse.bool_var3 == True, 'some column']
引发:
ValueError:序列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。


.loc
的上下文中,这些符号之间有什么区别?错误的原因是什么

在这种情况下不应使用
is
运算符,因为
is
告诉您它是否是同一个对象,即两个对象的
id()
是否相等

In [43]: df
Out[43]:
       a      b      c
0  False  False  False
1   True   True   True
2   True  False  False
3  False   True  False
4   True  False  False

In [44]: id(True)
Out[44]: 497422000

In [45]: id(False)
Out[45]: 497422032

In [46]: id(df.a)
Out[46]: 150038344

In [47]: df.a is True
Out[47]: False

In [48]: df.a is False
Out[48]: False

In [49]: df.a == False
Out[49]:
0     True
1    False
2    False
3     True
4    False
Name: a, dtype: bool
诸如(
=
!=
等)之类的运算符会被pandas对象覆盖-这就是最后一条语句正常工作的原因

所以你应该这样做:

In [50]: df.a | df.b | df.c
Out[50]:
0    False
1     True
2     True
3     True
4     True
dtype: bool

In [51]: (df.a == True) | (df.b == True) | (df.c == True)
Out[51]:
0    False
1     True
2     True
3     True
4     True
dtype: bool
或者,您也可以这样做(作为:
df.a | df.b | df.c
)的替代方案:

或者(作为以下选项的替代:
df.a&df.b&df.c
):


将谓词放入
(…)
中,例如:
(data2analyse.bool_var1==True);(data2analyse.bool_var2==True);(data2analyse.bool_var3==True)
@MaxU谢谢。你是对的,但是如果我使用
var为真
不起作用,非常感谢!反应很好。我还有另一个问题:为什么我在使用´==´运算符时必须用括号括住谓词?@JuanDavid:the表明
=
绑定得更紧密。因此,如果没有括号,
df.a==True | df.b==True
将被评估为
df.a==(True | df.b)==True
@unutbu,谢谢!这是非常清楚和整洁的解释!
In [55]: df.any(axis=1)
Out[55]:
0    False
1     True
2     True
3     True
4     True
dtype: bool
In [56]: df.all(axis=1)
Out[56]:
0    False
1     True
2    False
3    False
4    False
dtype: bool