首页 >后端开发 >Python教程 >为什么具有多个条件的 Pandas 索引会表现出意外的行为?

为什么具有多个条件的 Pandas 索引会表现出意外的行为?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-25 09:47:02265浏览

Why Does Pandas Indexing with Multiple Conditions Exhibit Unexpected Behavior?

Pandas 多条件索引:意外行为

对于 pandas,将过滤器应用于 DataFrame 是一种常见操作。但是,当使用多个条件时,尤其是使用 AND 和 OR 等逻辑运算符时,可能会出现意外结果。

问题:

根据两列中的值过滤行时,AND 运算符的行为类似于 OR,反之亦然。例如,下面的代码应该:

  • 使用 AND 运算符排除任一列值为 -1 的行。
  • 使用 OR 运算符排除两个列值都为 -1 的行。 -1.
<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) & (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>

解释:

意外行为源于逻辑运算符在 pandas 索引上下文中的解释方式。

  • AND 运算符:

    • df[(df.a != -1) & (df.b != -1)] 表示“保留 df.a 不为 -1 且 df.b 不为 -1 的行”。
    • 这将过滤掉至少一个值为 -1 的行。
  • 或运算符:

    • df[(df.a != -1) | (df.b != -1)] 表示“保留 df.a 或 df.b 不为 -1 的行”。
    • 这会过滤掉两个值为 -1 的行。

因此,AND 运算符的行为类似于 OR,因为它根据任一列中不存在 -1 来排除行。相反,OR 运算符的行为类似于 AND,因为仅当两列都不包含 -1 时它才包含行。

附加说明:

  • 建议使用.loc 和 .iloc 而不是链式索引(例如 df'a' = -1),以实现更清晰、更安全的代码实践。

以上是为什么具有多个条件的 Pandas 索引会表现出意外的行为?的详细内容。更多信息请关注PHP中文网其他相关文章!

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