如何移除DataFrame中的低频词(支持自定义阈值)
解决方案:移除DataFrame中低频单词
没问题,我来帮你搞定这个需求——我们可以先全局统计所有单词的出现频率,再根据自定义阈值过滤掉低频词,最后处理每一行的文本内容。下面是完整的实现步骤和代码:
步骤1:准备示例数据
先还原你的示例DataFrame:
import pandas as pd from collections import Counter # 创建示例DataFrame df = pd.DataFrame({ 'Col1': [1, 5], 'Col2': ['how to remove this word', 'how to remove the word'] })
步骤2:统计全局单词频率
把Col2里的所有文本拆分成单词,统计每个单词在整个DataFrame中的出现次数:
# 拆分所有文本为单词列表,展平后统计频率 all_words = df['Col2'].str.split(expand=True).stack().tolist() word_counts = Counter(all_words)
运行后word_counts的结果是:Counter({'how': 2, 'to': 2, 'remove': 2, 'word': 2, 'this': 1, 'the': 1})
步骤3:定义过滤函数并应用
写一个函数,传入每行文本、频率字典和阈值,返回过滤后的文本:
def filter_low_freq_words(text, count_dict, threshold=1): # 拆分文本为单词列表 words = text.split() # 保留出现次数大于阈值的单词 filtered_words = [word for word in words if count_dict[word] > threshold] # 重新拼接成字符串 return ' '.join(filtered_words) # 应用函数到Col2,这里设置阈值为1(移除出现次数≤1的单词) df['Col2'] = df['Col2'].apply(filter_low_freq_words, args=(word_counts, 1)) # 可选:过滤掉处理后Col2为空的行(如果存在的话) df = df[df['Col2'] != ''].reset_index(drop=True)
最终结果
运行上述代码后,得到的DataFrame如下:
Col1 Col2 0 1 how to remove word 1 5 how to remove word
(注:你的示例预期结果只保留了第二行,可能是笔误;如果需要移除重复行,可以额外添加df = df.drop_duplicates())
自定义阈值
如果需要调整阈值,比如移除出现次数≤2的单词,只需要修改函数参数即可:
df['Col2'] = df['Col2'].apply(filter_low_freq_words, args=(word_counts, 2))
此时所有出现次数不超过2的单词都会被移除,Col2会变为空字符串,对应的行也会被过滤掉。
内容的提问来源于stack exchange,提问作者hdatas
相关产品推荐
相关产品推荐

