You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Pandas DataFrame中多关键词的逐行搜索效率?

优化pandas语句词汇搜索的性能方案

嗨,这个问题太常见了——用逐行循环处理pandas DataFrame时,一旦数据量上来,速度肯定拉胯,毕竟pandas的核心优势就是矢量化批量操作,咱们换个思路就能解决:

原代码的问题点

你的循环写法虽然能跑,但有两个核心问题:

  1. 逐行迭代range(len(p))完全没用到pandas的批量处理能力,Python级别的循环在大数据集下开销极大
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:34:25