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 的行。
这种行为可能看起来违反直觉,但它使如果我们还记得我们正在为要保留而不是删除的行指定条件,那就有意义了。
因此,观察到的行为是正确的。
以上是为什么 Pandas 的 AND (&) 和 OR (|) 运算符在使用多个条件索引 DataFrame 时看起来颠倒了?的详细内容。更多信息请关注PHP中文网其他相关文章!