有效過濾Pandas 資料幀中的多個子字串
過濾資料幀中的子字串是一項常見任務,但對於大型資料集來說,計算成本可能會很高。在處理異常字元和不區分大小寫的匹配時,挑戰會更加複雜。
問題:
給定一個帶有字串列的 Pandas資料框,有效地過濾行,使得該列至少包含子字串列表中的一個,無論大小寫和特殊字元如何
低效方法:
最初的方法涉及迭代列表中的每個子字串,並使用regex=False 和case 應用str.contains() 方法=假旗。雖然這種方法很簡單,但對於大型資料集來說可能會很慢。
高效方法:
更有效的解決方案利用正規表示式來建構包含所有轉義的模式由正規表示式管道 | 連接的子字串。然後使用 str.contains() 方法對照列中的每個字串檢查此模式。
import re lst = ['kdSj;af-!?', 'aBC+dsfa?\-', 'sdKaJg|dksaf-*'] esc_lst = [re.escape(s) for s in lst] pattern = '|'.join(esc_lst) df[col].str.contains(pattern, case=False)
這種方法的執行速度明顯快於迭代方法,特別是對於需要轉義的大型資料集和子字串。
效能評估:
使用資料集50,000 個字串和100 個子字串,所提出的方法大約需要1 秒才能完成,而迭代方法大約需要5 秒。如果任何子字串與列值匹配,則時間會進一步改善。
以上是如何有效過濾 Pandas DataFrame 中的多個子字串、處理大小寫和特殊字元?的詳細內容。更多資訊請關注PHP中文網其他相關文章!