Pandas:使用稀疏矩阵连接DataFrame

11

我正在进行一些基础机器学习,得到了一个由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个回答

4
请看下面的演示:

原始数据集:

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

请注意.memory_usage() - 我们没有丢失“稀疏性”。 如果我们使用pd.concatjoinmerge等方法 - 我们会失去“稀疏性”,因为所有这些方法都会生成一个新的常规(不稀疏)复制合并的数据框。


4
请注意,Pandas 1.0 中已删除 SparseDataFrame。来源 - Xaser
请注意,在Pandas 1.0版本中已经移除了SparseDataFrame。您可以使用SparseDtype。 - undefined

0
也许您可以在进行连接之前,在稀疏矩阵上使用to_dense(),然后再使用to_sparse()将其转换回稀疏矩阵。希望能有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接