首页  >  文章  >  后端开发  >  为什么 pandas 中的 AND 运算符(&)在按多个条件过滤数据帧时表现得像 OR 运算符(|)?

为什么 pandas 中的 AND 运算符(&)在按多个条件过滤数据帧时表现得像 OR 运算符(|)?

Susan Sarandon
Susan Sarandon原创
2024-10-26 08:57:30675浏览

Why does the AND operator (&) in pandas behave like the OR operator (|) when filtering data frames by multiple conditions?

pandas:使用多个条件过滤数据框

在 pandas 中,按多列中的值过滤数据框可能很棘手。使用 AND 运算符 (&) 时,您可能期望它的行为类似于 OR 运算符 (|),反之亦然。

考虑以下测试代码:

<code class="python">df = pd.DataFrame({'a': range(5), 'b': range(5) })
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1
df1 = df[(df.a != -1) &amp; (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]
print(pd.concat([df, df1, df2], axis=1, keys=[ 'original df', 'using AND (&amp;)', 'using OR (|)',]))</code>

意外的情况结果中出现以下行为:

      original df      using AND (&amp;)      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]

AND 运算符 (&) 会删除至少一个值为 -1 的每一行,而 OR 运算符 (|) 仅删除两个值为 -1 的行。此行为与预期相反。

此行为的原因在于这些运算符的使用方式。在 AND 条件中,您指定保留两个条件都为 true 的行,这相当于删除至少一个条件为 false 的行。相反,OR 条件指定保留任一条件为 true 的行,这相当于删除两个条件都为 false 的行。

为了确保清晰并避免混淆,建议对条件使用显式表示法涉及多个列。不要使用运算符链接多个条件,而是使用括号对条件进行分组并明确它们的逻辑关系。

例如,以下代码显式指定 AND 条件:

<code class="python">df1 = df[(df.a != -1) & (df.b != -1)]</code>

而以下代码代码显式指定 OR 条件:

<code class="python">df2 = df[(df.a != -1) | (df.b != -1)]</code>

通过使用显式表示法,您可以确保您的条件按预期解释并防止意外行为。

以上是为什么 pandas 中的 AND 运算符(&)在按多个条件过滤数据帧时表现得像 OR 运算符(|)?的详细内容。更多信息请关注PHP中文网其他相关文章!

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