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中文网其他相关文章!