首頁 >後端開發 >Python教學 >為什麼 Pandas 的 AND (&) 和 OR (|) 運算子在使用多個條件索引 DataFrame 時看起來顛倒了?

為什麼 Pandas 的 AND (&) 和 OR (|) 運算子在使用多個條件索引 DataFrame 時看起來顛倒了?

Linda Hamilton
Linda Hamilton原創
2024-10-25 16:30:09730瀏覽

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