Python 将sklearn CountVectorizer矩阵转换为字典列表
我已经用CountVectorizer创建了一个矩阵Python 将sklearn CountVectorizer矩阵转换为字典列表,python,numpy,scikit-learn,Python,Numpy,Scikit Learn,我已经用CountVectorizer创建了一个矩阵 [[1, 2, 1....], [0, 4, 0,...], [0, 0, 7....]] 其中,每列映射到要素名称 ['sweet', 'pretty', 'bad'....] 我想做什么 将矩阵的行转换为表单的字典列表 [{'sweet': 1, 'pretty': 2, 'bad': 1 ..} , {'sweet': 0, 'pretty': 4, 'bad': 0 ..} , {'sweet': 0, 'pretty':
[[1, 2, 1....],
[0, 4, 0,...],
[0, 0, 7....]]
其中,每列映射到要素名称
['sweet', 'pretty', 'bad'....]
我想做什么将矩阵的行转换为表单的字典列表
[{'sweet': 1, 'pretty': 2, 'bad': 1 ..} , {'sweet': 0, 'pretty': 4, 'bad': 0 ..} , {'sweet': 0, 'pretty': 0, 'bad': 7 ..}]
这基本上是做逆变换功能的DictVectorizer
所做的,但是由于我没有从字典中创建矩阵,我认为我不能使用它,因为我得到了这个错误
“DictVectorizer”对象没有属性“feature\u names\u”
我如何做到这一点?NumPy是否提供了一个内置函数来将数组转换为字典列表,以便将每列映射到给定的键 您要查找的函数是get\u feature\u names
不确定是否有一个内置的方式来实现你想要的,但它是很容易实现的一个简单的地图
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
#`data` is an array of strings
tdata = cv.fit_transform(data)
ft = cv.get_feature_names()
#create a dictionary with feature names as keys and row elements as values
result = list(map(lambda row:dict(zip(ft,row)),tdata.toarray()))
编辑:内存节省解决方案
import pandas as pd
df = pd.SparseDataFrame(tdata, columns=ft)
将帮助提供一些样本数据
另请参见。最后一行是我要找的,谢谢。然而,我正在处理一个超过百万行的文本文件,所以它给了我一个内存错误。我认为如果我能将数组转换为pandas DataFrame可能会很有效,它确实有一个内置的方法来实现这一点,但我得到了“DataFrame构造函数没有正确调用!”当我执行DataFrame(data=X,columns=ft)时,你可以使用类似df=pd.DataFrame(tdata.toarray(),columns=ft)
或更好的方法,稀疏数据帧df=pd.SPARSTAFRAME(tdata,columns=ft)
对我不起作用,但它确实起作用了:pd.dataframe.sparse.from_spmatrix(tdata,columns=ft)