對系列中的多個子字串進行高效Pandas 過濾
確定一個系列是否包含多個子字串中的任何一個是數據分析中的常見任務。雖然使用邏輯或組合單一 str.contains 操作提供了一種簡單的解決方案,但對於長子字串清單和大型資料幀來說,它可能效率低下。
要最佳化此任務,請考慮採用正規表示式 (regex) 方法。透過將子字串包裝在正規表示式模式中,我們可以利用 pandas 的高效字串匹配功能。具體來說,在轉義子字串中的任何特殊字元後,我們可以透過使用管道字元(|) 連接子字串來建構正規表示式模式:
import re esc_lst = [re.escape(s) for s in lst] pattern = '|'.join(esc_lst)
使用此模式,我們可以使用str 過濾序列。包含且不區分大小寫的匹配:
df[col].str.contains(pattern, case=False)
這種方法提供了改進的性能,特別是對於大型資料幀。考慮以下範例:
from random import randint, seed seed(321) # 100 substrings of 5 characters lst = [''.join([chr(randint(0, 256)) for _ in range(5)]) for _ in range(100)] # 50000 strings of 20 characters strings = [''.join([chr(randint(0, 256)) for _ in range(20)]) for _ in range(50000)] col = pd.Series(strings) esc_lst = [re.escape(s) for s in lst] pattern = '|'.join(esc_lst)
使用這種最佳化方法,對於 50,000 行和 100 個子字串的過濾操作大約需要 1 秒,比原始問題中描述的方法要快得多。對於較大的資料幀和子字串列表,效能差異變得更加明顯。
以上是如何有效過濾 Pandas 系列的多個子字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!