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

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

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

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]刪除
最新教學 更多>
  • 在JavaScript中如何獲取實際渲染的字體,當CSS字體屬性未定義時?
    在JavaScript中如何獲取實際渲染的字體,當CSS字體屬性未定義時?
    Accessing Actual Rendered Font when Undefined in CSSWhen accessing the font properties of an element, the JavaScript object.style.fontFamily and objec...
    程式設計 發佈於2025-04-18
  • Go web應用何時關閉數據庫連接?
    Go web應用何時關閉數據庫連接?
    在GO Web Applications中管理數據庫連接很少,考慮以下簡化的web應用程序代碼:出現的問題:何時應在DB連接上調用Close()方法? ,該特定方案將自動關閉程序時,該程序將在EXITS EXITS EXITS出現時自動關閉。但是,其他考慮因素可能保證手動處理。 選項1:隱式關閉終...
    程式設計 發佈於2025-04-18
  • 如何限制動態大小的父元素中元素的滾動範圍?
    如何限制動態大小的父元素中元素的滾動範圍?
    在交互式接口中實現垂直滾動元素的CSS高度限制問題:考慮一個佈局,其中我們具有與用戶垂直滾動一起移動的可滾動地圖div,同時與固定的固定sidebar保持一致。但是,地圖的滾動無限期擴展,超過了視口的高度,阻止用戶訪問頁面頁腳。 $("#map").css({ margin...
    程式設計 發佈於2025-04-18
  • 如何配置Pytesseract以使用數字輸出的單位數字識別?
    如何配置Pytesseract以使用數字輸出的單位數字識別?
    Pytesseract OCR具有單位數字識別和僅數字約束 在pytesseract的上下文中,在配置tesseract以識別單位數字和限制單個數字和限制輸出對數字可能會提出質疑。 To address this issue, we delve into the specifics of Te...
    程式設計 發佈於2025-04-18
  • 如何在Java的全屏獨家模式下處理用戶輸入?
    如何在Java的全屏獨家模式下處理用戶輸入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    程式設計 發佈於2025-04-18
  • 如何使用node-mysql在單個查詢中執行多個SQL語句?
    如何使用node-mysql在單個查詢中執行多個SQL語句?
    Multi-Statement Query Support in Node-MySQLIn Node.js, the question arises when executing multiple SQL statements in a single query using the node-mys...
    程式設計 發佈於2025-04-18
  • 為什麼我的Windows服務在使用InstallUtil.exe後不出現在添加/刪除程序中?
    為什麼我的Windows服務在使用InstallUtil.exe後不出現在添加/刪除程序中?
    [2 為什麼installutil.exe不添加服務來添加/刪除程序使用主要是開發人員工具,而不是生產部署解決方案。 要進行適當的服務部署並添加/刪除程序集成,請使用專用工具創建MSI安裝程序包。 以下是一些流行的選擇: wix(Windows Installer XML):一個功能強大的開放式...
    程式設計 發佈於2025-04-18
  • 如何使用不同數量列的聯合數據庫表?
    如何使用不同數量列的聯合數據庫表?
    合併列數不同的表 當嘗試合併列數不同的數據庫表時,可能會遇到挑戰。一種直接的方法是在列數較少的表中,為缺失的列追加空值。 例如,考慮兩個表,表 A 和表 B,其中表 A 的列數多於表 B。為了合併這些表,同時處理表 B 中缺失的列,請按照以下步驟操作: 確定表 B 中缺失的列,並將它們添加到表的...
    程式設計 發佈於2025-04-18
  • 為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    為什麼我會收到MySQL錯誤#1089:錯誤的前綴密鑰?
    mySQL錯誤#1089:錯誤的前綴鍵錯誤descript [#1089-不正確的前綴鍵在嘗試在表中創建一個prefix鍵時會出現。前綴鍵旨在索引字符串列的特定前綴長度長度,可以更快地搜索這些前綴。 了解prefix keys `這將在整個Movie_ID列上創建標準主鍵。主密鑰對於唯一識...
    程式設計 發佈於2025-04-18
  • SQL Server查詢能否使用序號位置進行數據選擇?
    SQL Server查詢能否使用序號位置進行數據選擇?
    在SQL Server數據選擇 使用序列位置的檢索列數據通常是不可驗證的練習,因為它可能導致錯誤的練習通常不建議您進行錯誤。但是,在某些情況下,例如偶爾的數據導入過程,可能是必要的。本文探討了是否可以使用序列位置在SQL Server中選擇數據。 我們可以使用序列位置選擇數據嗎? 否。 SQL ...
    程式設計 發佈於2025-04-18
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php $xml = simplexml_load_file($file); foreach ($xml->Var[0]->attributes() as $attributeName => $attributeValue) { echo $attributeName,...
    程式設計 發佈於2025-04-18
  • 查找當前執行JavaScript的腳本元素方法
    查找當前執行JavaScript的腳本元素方法
    如何引用當前執行腳本的腳本元素在某些方案中理解問題在某些方案中,開發人員可能需要將其他腳本動態加載其他腳本。但是,如果Head Element尚未完全渲染,則使用document.getElementsbytagname('head')[0] .appendChild(v)的常規方...
    程式設計 發佈於2025-04-18
  • 如何在php中使用捲髮發送原始帖子請求?
    如何在php中使用捲髮發送原始帖子請求?
    如何使用php 創建請求來發送原始帖子請求,開始使用curl_init()開始初始化curl session。然後,配置以下選項: curlopt_url:請求 [要發送的原始數據指定內容類型,為原始的帖子請求指定身體的內容類型很重要。在這種情況下,它是文本/平原。要執行此操作,請使用包含以下標頭...
    程式設計 發佈於2025-04-18
  • GUIDs能保證唯一性嗎?實戰演示
    GUIDs能保證唯一性嗎?實戰演示
    GUID並非絕對唯一:簡單反證 普遍認為GUID是唯一性的說法受到了質疑。本文提供一個簡單的C#程序來演示GUID的非唯一性,並附帶一個改進版本,以提高程序的穩定性和性能。 初始程序 最初的程序嘗試迭代一系列GUID,預期該過程需要較長時間。然而,由於其簡單的實現,它未能產生預期的結果。 改進...
    程式設計 發佈於2025-04-18
  • Go語言垃圾回收如何處理切片內存?
    Go語言垃圾回收如何處理切片內存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片時,了解垃圾收集行為至關重要,以避免潛在的內存洩...
    程式設計 發佈於2025-04-18

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

Copyright© 2022 湘ICP备2022001581号-3