如何按分类统计词频?已获取矢量化DataFrame与vectorizer.vocabulary_
按分类统计词汇词频的解决方案
Hey 👋,别着急!我来一步步帮你搞定按分类统计词汇词频的问题,其实核心就是把文档级的词频聚合到分类级别,再把词汇索引映射回实际词汇就行。
先理清楚你的现有资源
从你的描述来看,你已经有:
- 一个分类×词汇的DataFrame(行是分类,列是词汇,单元格是对应词频)
vectorizer.vocabulary_:词汇到列索引的映射字典(比如{'the': 17480})
如果你的目标是把所有词汇(包括vocabulary_里的所有词)都按分类统计词频,或者完善现有DataFrame的词汇覆盖,咱们可以这么做:
步骤1:生成索引到词汇的反向映射
vectorizer.vocabulary_是「词汇→索引」的映射,我们需要把它转成「索引→词汇」的反向字典,方便后续对应矩阵列:
# 生成索引到词汇的反向字典 idx_to_word = {idx: word for word, idx in vectorizer.vocabulary_.items()}
步骤2:从文档级词频聚合到分类级(如果还没得到分类汇总)
如果你现在只有文档×词汇的原始矢量化矩阵(比如vectorizer.transform(texts)得到的稀疏矩阵),先把它转成带分类的DataFrame,再分组求和:
import pandas as pd # 假设你有:原始文本对应的分类列表categories,以及矢量化后的矩阵X df = pd.DataFrame(X.toarray(), columns=vectorizer.get_feature_names_out()) df['category'] = categories # 给每个文档添加对应的分类列 # 按分类分组,对所有词汇列求和,得到每个分类下的词汇总词频 category_word_freq = df.groupby('category').sum()
步骤3:完善你已有的分类-词汇DataFrame
如果你已经有开头提到的那个DataFrame,但想补充vocabulary_里的所有词汇,可以用reindex补全缺失的词汇(缺失的词频自动设为0):
# 获取vectorizer包含的所有词汇列表 all_words = list(vectorizer.vocabulary_.keys()) # 重新索引现有DataFrame,补充缺失词汇 full_category_freq = your_existing_df.reindex(columns=all_words, fill_value=0)
关键小提示
- 别手动匹配
vocabulary_的索引!直接用vectorizer.get_feature_names_out()就能得到和矩阵列完全对应的词汇列表,比自己排序字典靠谱多了~ - 如果你的矢量化矩阵是稀疏矩阵(比如
csr_matrix),数据量很大时可以用pd.DataFrame.sparse.from_spmatrix(X)创建DataFrame,比转成数组更高效。
这样你就能清晰看到每个分类下各个词汇的总出现次数啦,新手可以先拿小样本测试一下,验证结果是否符合预期哦😉
内容的提问来源于stack exchange,提问作者Viktor.w
相关产品推荐
相关产品推荐

