首页  >  文章  >  后端开发  >  为什么 Pandas 的 AND (&) 和 OR (|) 运算符在使用多个条件索引 DataFrame 时看起来颠倒了?

为什么 Pandas 的 AND (&) 和 OR (|) 运算符在使用多个条件索引 DataFrame 时看起来颠倒了?

Linda Hamilton
Linda Hamilton原创
2024-10-25 16:30:09627浏览

Why Does Pandas' AND (&) and OR (|) Operators Seem Reversed When Indexing a DataFrame with Multiple Conditions?

pandas:索引数据帧时多个条件下的意外行为

当按多列中的值过滤 DataFrame 中的行时,必须了解 AND (&) 和 OR (|) 运算符的行为。

在最近的观察中,人们注意到这些运算符的行为似乎相反。 OR 运算符的行为类似于 AND 运算符,反之亦然。

为了说明这一点,请考虑以下 DataFrame:

<code class="python">df = pd.DataFrame({'a': range(5), 'b': range(5) })

# Insert -1 values
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1

df1 = df[(df.a != -1) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]

print(pd.concat([df, df1, df2], axis=1, keys=['Original df', 'Using AND (&)', 'Using OR (|)']))</code>

结果为:

<code class="python">      Original df      Using AND (&)      Using OR (|)    
             a  b              a   b             a   b
0            0  0              0   0             0   0
1           -1 -1            NaN NaN           NaN NaN
2            2  2              2   2             2   2
3           -1  3            NaN NaN            -1   3
4            4 -1            NaN NaN             4  -1

[5 rows x 6 columns]</code>

如输出中所示,AND 运算符会删除至少一个值为 -1 的行,而 OR 运算符会保留两个值都不是 -1 的行。

这种行为可能看起来违反直觉,但它使如果我们还记得我们正在为要保留而不是删除的行指定条件,那就有意义了。

  • 对于 df1,我们指定要将行保留在 df.a 和 df.b 都不为 -1。
  • 对于 df2,我们指定要保留 df.a 或df.b 不是 -1。

因此,观察到的行为是正确的。

以上是为什么 Pandas 的 AND (&) 和 OR (|) 运算符在使用多个条件索引 DataFrame 时看起来颠倒了?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn