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