首頁  >  文章  >  後端開發  >  為什麼在 Pandas 過濾操作中使用 AND (`&`) 和 OR (`|`) 運算子會產生意外的結果?

為什麼在 Pandas 過濾操作中使用 AND (`&`) 和 OR (`|`) 運算子會產生意外的結果?

Susan Sarandon
Susan Sarandon原創
2024-10-25 06:55:28732瀏覽

Why Does Using AND (`&`) and OR (`|`) Operators in Pandas Filtering Operations Produce Unexpected Results?

pandas:索引資料幀時的多個條件 - 意外行為

在資料分析中,pandas 是操作和處理資料幀的重要庫。在執行篩選操作時,了解使用多個條件時運算子的行為至關重要。

讓我們考慮一個場景,我們想要根據兩列「a」和「a」中的值來過濾資料框中的行。 b'。使用 AND '&' 運算子和 OR '|'運算符,我們期望 AND 刪除至少一個值等於 -1 的行,而 OR 應保留兩個值均為 -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>

意外的是,AND 運算子刪除至少有一個值的每一行是 -1,而 OR 運算子要求兩個值都為 -1 才能刪除它們。

理解這種行為的關鍵在於記住我們正在根據我們想要保留的內容編寫條件,不是我們想要刪除的。

  • 對於df1: (df.a != -1) & (df.b != -1) 表示「保留df.a 不存在的行- 1 且df.b 不是-1 ”,這相當於刪除至少一個值為-1 的行。
  • 對於df2: (df.a != -1) | (df.b != -1) 表示“保留df.a 或df.b 不為-1 的行”,相當於刪除兩個值為-1 的行。

使用 df.loc 和 df.iloc 等鍊式存取而不是 df['a'][1] = -1 來避免潛在問題至關重要。

以上是為什麼在 Pandas 過濾操作中使用 AND (`&`) 和 OR (`|`) 運算子會產生意外的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn