2017-06-28 86 views
0

我正在做一些基本的机器学习和具有TFIDF产生的稀疏矩阵如下:熊猫:串联数据帧与稀疏矩阵

<983x33599 sparse matrix of type '<type 'numpy.float64'>' 
    with 232944 stored elements in Compressed Sparse Row format> 

然后我有一个title列一个数据帧。我想将这些结合到一个DataFrame中,但是当我尝试使用concat时,我发现我无法将DataFrame与非DataFrame对象组合起来。

我该如何解决这个问题?

谢谢!

回答

0

也许你可以在连接前尝试在稀疏矩阵上使用to_dense(),然后转换回稀疏矩阵to_sparse()。希望能帮助到你。

0

考虑以下演示:

来源DF:

In [2]: df 
Out[2]: 
        text 
0  is it good movie 
1 wooow is it very goode 
2    bad movie 

解决方案:让我们创建一个SparseDataFrame了TFIDF稀疏矩阵:

from sklearn.feature_extraction.text import TfidfVectorizer 

vect = TfidfVectorizer(sublinear_tf=True, max_df=0.5, analyzer='word', stop_words='english') 

sdf = pd.SparseDataFrame(vect.fit_transform(df['text']), 
         columns=vect.get_feature_names(), 
         default_fill_value=0) 
sdf['text'] = df['text'] 

结果:

In [13]: sdf 
Out[13]: 
    bad good  goode  wooow     text 
0 0.0 1.0 0.000000 0.000000  is it good movie 
1 0.0 0.0 0.707107 0.707107 wooow is it very goode 
2 1.0 0.0 0.000000 0.000000    bad movie 

In [14]: sdf.memory_usage() 
Out[14]: 
Index 80 
bad  8 
good  8 
goode  8 
wooow  8 
text  24 
dtype: int64 

P. S在.memory_usage()注意 - 我们没有失去“空闲”。如果我们将使用pd.concat,join,等 - 我们将失去“稀疏性”,因为所有这些方法都会生成一个新的常规(未稀疏)合并的DataFrame的副本