如何在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
相关产品推荐
相关产品推荐

