首页 >后端开发 >Python教程 >如何根据多个子字符串(包括特殊字符)有效过滤 Pandas 行?

如何根据多个子字符串(包括特殊字符)有效过滤 Pandas 行?

Patricia Arquette
Patricia Arquette原创
2024-11-28 09:09:15634浏览

How Can I Efficiently Filter Pandas Rows Based on Multiple Substrings, Including Special Characters?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn