」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用布林索引有效過濾 Pandas 資料物件?

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

發佈於2024-11-01
瀏覽:426

How to Efficiently Filter Pandas Data Objects Using Boolean Indexing?

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

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

挑戰

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

解決方案:布林索引

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

df.loc[df['col1'] >= 1, 'col1']

這行程式碼選擇DataFrame df 中的所有行,其中“ col1”列中的值大於或等於1。結果是一個包含過濾值的新 Series 物件。

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

df[(df['col1'] >= 1) & (df['col1'] <= 1)]

此操作過濾其中的行' col1' 既大於或等於1,又小於或等於1。

輔助函數

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

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。

用法範例

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

filters = {'>=': [1], '
b1 = b(df, 'col1', ge, 1)
b2 = b(df, 'col1', le, 1)
filtered_df = f(df, b1, b2)

此程式碼將過濾器套用於 DataFrame df 中的「col1」列,並傳回帶有過濾結果的新 DataFrame。

增強功能

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

df.query('col1 

這一行實現了與我們的相同的過濾前面的範例使用了更簡潔的語法。

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

版本聲明 本文轉載於:1729395079如有侵犯,請洽[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3