使用Pandas对DataFrame文本列向量化报错,求解决方案
解决CountVectorizer向量化DataFrame列时的TypeError问题
Hey there! Let's break down what's going wrong here and fix it right away.
为什么你的代码报错?
你当前的代码里,vectorizerCount.fit_transform(allData.iloc[:]['headline_text'])会直接返回一个csr_matrix对象——这是整个headline_text列向量化后的结果,而不是一个可以逐行调用的函数。当你把这个矩阵传给apply()时,Pandas会尝试把它当成函数去作用于每一行,自然就会抛出"'csr_matrix' object is not callable"的错误啦。
更重要的是:CountVectorizer本来就不需要逐行处理!它的设计逻辑是先拟合整个语料库的词汇表,再一次性把所有文本转换成向量,逐行处理反而会破坏词汇表的一致性,得到不符合预期的结果。
正确的实现方法
直接用fit_transform作用于整个headline_text列就可以了,一行代码搞定:
from sklearn.feature_extraction.text import CountVectorizer import pandas as pd # 初始化向量器,停用英文停用词 vectorizerCount = CountVectorizer(stop_words='english') # 直接对整个列进行向量化,得到的矩阵每行对应原DataFrame的一行 allDataVectorized = vectorizerCount.fit_transform(allData['headline_text'])
可选:把向量结果和原DataFrame合并
如果需要把向量化后的结果和原数据放在一起,可以把csr矩阵转换成DataFrame,再和原表拼接:
# 将稀疏矩阵转为普通DataFrame,列名是词汇表中的单词 vectorized_df = pd.DataFrame( allDataVectorized.toarray(), columns=vectorizerCount.get_feature_names_out(), index=allData.index # 保持和原数据的索引一致 ) # 横向拼接原DataFrame和向量化结果 combined_data = pd.concat([allData, vectorized_df], axis=1)
这样你就得到了包含原始数据和文本向量的完整数据集啦!
内容的提问来源于stack exchange,提问作者Pvic
相关产品推荐
相关产品推荐

