首頁  >  文章  >  後端開發  >  如何使用布林索引有效過濾 Pandas 資料物件?

如何使用布林索引有效過濾 Pandas 資料物件?

Barbara Streisand
Barbara Streisand原創
2024-10-20 11:57:30577瀏覽

How to Efficiently Filter Pandas Data Objects Using Boolean Indexing?

使用布林索引對 Pandas 資料幀和系列進行高效過濾

在資料分析場景中,應用多個過濾器來縮小結果範圍通常至關重要。本文旨在提出一種有效的方法來連結 Pandas 資料物件上的多個比較操作。

挑戰

目標是處理關係運算符字典並將它們附加地應用於給定的 Pandas Series 或 DataFrame,產生過濾後的資料集。此操作需要最大限度地減少不必要的資料複製,尤其是在處理大型資料集時。

解決方案:布林索引

Pandas 提供了一種使用布林索引過濾資料的高效機制。布林索引涉及建立邏輯條件,然後使用這些條件對資料建立索引。考慮以下範例:

<code class="python">df.loc[df['col1'] >= 1, 'col1']</code>

這行程式碼選擇 DataFrame df 中「col1」欄位中的值大於或等於 1 的所有行。結果是一個新的 Series 對象,其中包含過濾後的值。

要套用多個篩選器,我們可以使用邏輯運算子(如 &)來組合佈林條件。 (和)和| (或)。例如:

<code class="python">df[(df['col1'] >= 1) & (df['col1'] <= 1)]

此運算過濾 'col1' 大於或等於 1 且小於或等於 1 的行。

輔助函數

為了簡化應用多個過濾器的過程,我們可以建立輔助函數:

<code class="python">def b(x, col, op, n): 
    return op(x[col], n)

def f(x, *b):
    return x[(np.logical_and(*b))]

b 函數為給定列和運算符建立布爾條件,而f 將多個布林條件套用於DataFrame 或Series。

使用範例

要使用這些函數,我們可以提供過濾條件的字典:

<code class="python">filters = {'>=': [1], '<=': [1]}</code>
<code class="python">b1 = b(df, 'col1', ge, 1)
b2 = b(df, 'col1', le, 1)
filtered_df = f(df, b1, b2)</code>

此程式碼將過濾器應用於「col1」

增強功能

Pandas 0.13 引入了查詢方法,它提供了一種使用字串表達式應用過濾器的便捷方法。對於有效的列標識符,可以使用以下程式碼:

<code class="python">df.query('col1 <= 1 & 1 <= col1')</code>

此行使用更簡潔的語法實現與前面的範例相同的過濾。

透過利用布林索引和輔助函數,我們可以有效地將多個過濾器應用於 Pandas 資料幀和系列。這種方法可以最大限度地減少資料複製並提高效能,特別是在處理大型資料集時。

以上是如何使用布林索引有效過濾 Pandas 資料物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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