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

如何在Python中快速筛选DataFrame字符串中的正确英文单词?

如何快速过滤Pandas DataFrame字符串列中的英文单词?

我有一个Pandas DataFrame,其中某列的每个单元格都包含一段较长的字符串。这些字符串来自SQL数据库,混合了英文单词和非英文的字母数字ID短语,以空格分隔,长度可达SQL字符上限。该DataFrame包含数百万行数据。

我的问题是:如何以最快的方式为每个单元格仅保留正确的英文单词?

以下是我最初的实现方法,但根据tqdm显示的速度,完成处理似乎需要数天时间:

import pandas as pd
from nltk.corpus import words
from tqdm import tqdm

def check_for_word(sentence):
    s = sentence.split(' ')
    for word in s:
        if word not in words.words():
            s.remove(word)
    return ' '.join(s)

tqdm.pandas(desc="Checking for Words in keywords")
df['keywords'] = df['keywords'].progress_apply(check_for_word)

是否存在显著更快的处理方法?

感谢您的帮助!


优化后的解决方案

我找到了一个能带来巨大性能提升的方案——原本需要数天的任务,调整后最终耗时仅43秒!

关键优化细节

  • 替换词库:把nltk.corpus.words换成nltk.corpus.wordnet,前者的词库覆盖范围有限,后者通过检查单词的同义词集(synsets)来判断是否为有效英文单词,覆盖度和准确性更适合这类场景。
  • 简化逻辑:用生成器表达式替代原有的列表遍历+元素移除操作,避免了列表动态修改带来的额外性能开销,代码也更简洁。

最终实现代码

from nltk.corpus import wordnet
from tqdm import tqdm

def check_for_word(s):
    return ' '.join(w for w in str(s).split(' ') if len(wordnet.synsets(w)) > 0)

tqdm.pandas(desc="Checking for Words in Keywords")
df['keywords'] = df['keywords'].progress_apply(check_for_word)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:47:50