首頁  >  文章  >  後端開發  >  為什麼 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