如何优化Pandas DataFrame中多关键词的逐行搜索效率?
优化pandas语句词汇搜索的性能方案
嗨,这个问题太常见了——用逐行循环处理pandas DataFrame时,一旦数据量上来,速度肯定拉胯,毕竟pandas的核心优势就是矢量化批量操作,咱们换个思路就能解决:
原代码的问题点
你的循环写法虽然能跑,但有两个核心问题:
- 逐行迭代
range(len(p))完全没用到pandas的批量处理能力,Python级别的循环在大数据集下开销极大 p.loc[i]["word_"+word]属于链式赋值,不仅效率低,还可能触发pandas的SettingWithCopy警告,存在潜在风险
最优优化方案:用矢量化字符串方法
直接用pandas内置的str.find方法,它会对整个sentence列一次性批量处理,底层是C实现的,速度比Python循环快几个量级:
import pandas as pd p = pd.DataFrame({"sentence" : ["this is a test", "yet another test", "now two tests", "test a", "no test"]}) test_words = ["yet", "test"] # 循环目标词,批量生成结果列 for word in test_words: p[f"word_{word}"] = p["sentence"].str.find(word)
运行后得到的结果和原代码完全一致,但处理10万+行的DataFrame时,速度能提升几十甚至上百倍。
额外扩展:如果只需要判断词汇是否存在
要是你的需求只是检查词汇有没有出现(不需要具体位置),可以用str.contains返回布尔值,速度会更快:
for word in test_words: p[f"has_{word}"] = p["sentence"].str.contains(word)
为什么这个方案更快?
pandas的字符串方法都是矢量化操作,会把整个Series作为一个整体处理,避免了Python循环逐行解释执行的开销。而且这些方法底层依赖于高效的字符串处理库,性能碾压手动循环。
内容的提问来源于stack exchange,提问作者N08
相关产品推荐
相关产品推荐

