提高 Pandas 系列中多个子字符串筛选的性能
当尝试筛选特定字符串列至少包含一个子字符串的行时给定列表,使用 np.logic_or.reduce() 的传统方法对于大型数据集可能效率低下。本文探讨了一种利用正则表达式来增强性能的替代方法。
建议的解决方案
我们在 str.contains() 中不使用 regex=False,而是使用正则表达式使用 re.escape() 正确转义提供的子字符串之后。这确保了文字匹配而不是正则表达式解释。然后使用正则表达式管道 (|) 将转义的子字符串组合成单个模式。
屏蔽过程
屏蔽阶段成为整个系列的循环,检查是否每个字符串与模式匹配:
df[col].str.contains(pattern, case=False)
性能比较
使用包含 100 个长度为 5 的子字符串和 50,000 个长度为 20 的字符串的样本数据集,所提出的方法大约需要 1 秒。对于相同的数据,原始方法大约需要 5 秒。
注意
此解决方案假设没有子字符串匹配的“最坏情况”场景。在有比赛的情况下,表现会进一步提高。此外,这种方法比最初的方法更有效,减少了每行所需的检查数量。
以上是正则表达式如何提高Pandas系列子串过滤性能?的详细内容。更多信息请关注PHP中文网其他相关文章!