Pandas:使用稀疏矩阵连接DataFrame

时间:2017-06-28 19:50:49

标签: python pandas dataframe

我正在做一些基本的机器学习,并且有一个由TFIDF产生的稀疏矩阵,如下所示:

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

然后我有一个title列的DataFrame。我想将这些组合到一个DataFrame中但是当我尝试使用concat时,我得到的是我无法将DataFrame与非DataFrame对象组合。

我该如何解决这个问题?

谢谢!

2 个答案:

答案 0 :(得分:2)

考虑以下演示:

来源DF:

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

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

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

PS注意.memory_usage() - 我们没有失去“空缺”。如果我们使用pd.concatjoinmerge等,我们就会失去“稀疏性”,因为所有这些方法都会生成合并的DataFrames的新常规(非稀疏)副本

答案 1 :(得分:0)

也许你可以在进行连接之前尝试在稀疏矩阵上使用to_dense(),然后转换回使用to_sparse()的稀疏矩阵。希望它有所帮助。