我的目标是从大小为300万的数据框中删除生疏词。下面的代码花费了很长时间。有什么方法可以优化它吗?
rare_word=[]
for k,v in frequency_word.items():
if v<=1:
rare_word.append(k)
df['description']=df['description'].apply(lambda x:[i for i in x if i not in rare_word] )
由于rare_word
非常大,表达式i not in rare_word
将会很慢,因为它执行线性搜索. 您可以通过将rare_word
转换为集合来加快速度。rare_word = set(rare_word)
。由于散列, set不仅在常量时间内执行not in
,它们还消除了对昂贵的字符串比较的需要(也是由于哈希)。您可以使用理解列表来更快地构建集合:
# Note the presence of the '{}'
rare_word = {k for k,v in frequency_word.items() if v<=1}
进一步优化代码可能是可能的,但如果没有关于数据框架的更多信息,很难说。至少这种优化应该会使代码的速度提高几个数量级。