如何在Pandas DataFrame中按词频移除出现恰好5次的列
解决方案
核心思路
你需要先统计每个词汇(对应DataFrame的列)在整个语料库中的总出现次数,再筛选出次数恰好为5的列并移除。只需把你之前代码里的列筛选逻辑,从按列名后缀判断改成按词频判断即可。
针对词频矩阵的代码实现
如果你的DataFrame是标准词频矩阵(每列对应一个词汇,单元格值为该词汇在对应文档中的出现次数),直接按列求和就能得到总词频:
# 计算每列(词汇)在语料库中的总出现次数 total_word_counts = df.sum(axis=0) # 筛选出总次数恰好为5的列名 cols_to_drop = total_word_counts[total_word_counts == 5].index.tolist() # 移除目标列 df.drop(cols_to_drop, axis=1, inplace=True)
代码解释
df.sum(axis=0):按列求和,返回一个Series,索引是列名(词汇),值为该词汇在所有文档中的总出现次数。total_word_counts[total_word_counts == 5].index.tolist():从总词频结果中筛选出次数等于5的词汇,提取它们的列名并转为列表。- 后续的
drop用法和你之前删除_y结尾列的逻辑完全一致,只是替换了列筛选条件。
针对非词频矩阵的补充处理
如果你的DataFrame单元格是原始文本而非次数,需要先全局统计词汇频率:
from collections import Counter # 拼接所有单元格的文本内容 all_corpus_text = ' '.join(df.stack().astype(str)) # 拆分词汇并统计频率 word_freq = Counter(all_corpus_text.split()) # 筛选出出现次数恰好为5的词汇 target_words = [word for word, count in word_freq.items() if count == 5] # 移除对应列 df.drop(target_words, axis=1, inplace=True)
内容的提问来源于stack exchange,提问作者Badambam
相关产品推荐
相关产品推荐

