2017-10-13 158 views
0

我创建使用CountVectorizer矩阵看起来字典的名单像转换sklearn 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': 0, 'bad': 7 ..}] 

这基本上是做什么的DictVectorizerinverse_transform功能会做,但因为我还没有从字典中产生的矩阵,我不认为我可以使用,因为我得到这个错误

“DictVectorizer 'object has no attribute'feature_names_'

我该如何做到这一点? NumPy提供了一个内置函数来将数组转换为字典列表,我可以将每列映射到给定的键?

+0

将有助于提供一些样本'数据' – sgDysregulation

回答

1

你要找的功能是get_feature_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())) 

编辑esily实现:节省内存解决方案

import pandas as pd 

df = pd.SparseDataFrame(tdata, columns=ft) 
+0

最后一行是我一直在寻找的感谢。不过,我正在处理一个超过100万行的文本文件,所以这给我一个内存错误。我认为这可能是有效的,如果我可以将数组转换为熊猫DataFrame,它有一个内置的方法来做到这一点,但我得到“DataFrame构造函数没有正确调用!”当我做DataFrame(data = X,columns = ft) –

+0

时,你可以使用'df = pd.DataFrame(tdata.toarray(),columns = ft)' – sgDysregulation

+0

或甚至更好的稀疏数据帧'df = pd。 SparseDataFrame(TDATA,列=英尺)' – sgDysregulation