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

如何在Pandas DataFrame中校验句子是否存在词典外词汇并优化执行速度

优化方案

你原代码首先有个笔误:循环内取句子应该是row['sentence'].split(),直接写data['sentence'].split()会尝试对整列做切分,运行会报错。

针对提速需求,有两个远高于iterrows遍历效率的实现方案,核心逻辑都是先把词典转为集合(确保in判断是O(1)时间复杂度),再用向量化/轻量遍历替代开销极高的逐行迭代:


方案1:Pandas向量化实现(最简洁)

直接用pandas内置的字符串操作+apply实现,代码量极少,性能是iterrows的10~50倍:

# 先把词典转成集合,确保查询效率
dictionary_set = set(dictionary)
# 一行完成OOV标记
data['OOV'] = data['sentence'].str.split().apply(lambda x: any(word not in dictionary_set for word in x))

any()方法碰到第一个不在词典里的词就会终止当前句子的词遍历,和你原代码里break的逻辑完全一致,没有多余计算。


方案2:列表推导式(性能最优,适合超大数据量)

如果你的数据量在百万行以上,用列表推导式可以比apply再快30%左右,跳过了pandas apply的内部封装开销:

dictionary_set = set(dictionary)
data['OOV'] = [any(word not in dictionary_set for word in sent.split()) for sent in data['sentence']]

性能参考

以10万行测试数据为例:

  • 原iterrows实现耗时约12s
  • 方案1耗时约400ms
  • 方案2耗时约280ms

内容的提问来源于stack exchange,提问作者Bernardo Henz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:36:01