python - 列索引器中的 bool 表达式 (Pandas) 'is' 运算符不起作用

标签 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 |
                          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):

In [55]: df.any(axis=1)
Out[55]:
0    False
1     True
2     True
3     True
4     True
dtype: bool

或者这个(作为替代:df.a & df.b & df.c):

In [56]: df.all(axis=1)
Out[56]:
0    False
1     True
2    False
3    False
4    False
dtype: bool

关于python - 列索引器中的 bool 表达式 (Pandas) 'is' 运算符不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38130108/

相关文章:

python - 在 plpython3u 过程中导入 Python 包时出现 "Module not found"

python - 如何在 robobrowser-python 中发起 POST 请求

Python Plotly 打印两个图表

Python SQL 到 pandas DataFrame 2

python - 如何使用循环从多个 pandas 数据框中删除一列?

python - Pandas 数据框中的计数和计数

python - 给出错误 "the JSON object must be str, not ' 字节'“

python - 一个热门编码器 categorical_features 的用途是什么?

python - 使用 NumPy/SciPy 的向量值函数插值

python-2.7 - Python 2.7 异常不处理 python3 兼容代码中的 unicode ('<exception str() failed>' )