Pandas:有效過濾多個子字串的行
基於多個子字串過濾pandas 資料幀可能具有挑戰性,特別是當子字串包含異常字元時。本文提供了一種結合使用正規表示式和 pandas 字串匹配函數的有效解決方案。
提供的子字串清單 (lst) 包含包含常規字元和特殊字元的元素。為了從字面上匹配它們,我們可以使用 re.escape 轉義這些特殊字符,並使用正則表達式管道 (|) 連接它們。
esc_lst = [re.escape(s) for s in lst] pattern = '|'.join(esc_lst)
現在,我們可以有效地檢查目標列(col) 的每一行使用str.contains 反對模式:
col.str.contains(pattern, case=False)
這種方法明顯優於使用巢狀循環和多個str.contains的原始解決方案
效能比較
使用包含50,000 個20 個字元的字串和100 個5 個字元的子字串的資料集,建議的方法大約需要1 秒:
%timeit col.str.contains(pattern, case=False) 1 loop, best of 3: 981 ms per loop
相較之下,原始方法在同一時間大約需要 5秒數據集。
注意: 時間表示沒有匹配的最壞情況。當存在匹配時,所提出的方法將表現得更好,因為一旦找到匹配,它將停止檢查子字串。
以上是如何根據多個子字串(包括特殊字元)有效過濾 Pandas 行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!