在資料分析場景中,應用多個過濾器來縮小結果範圍通常至關重要。本文旨在提出一種有效的方法來連結 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中文網其他相關文章!