【问题标题】:Pandas: Concatenating DataFrame with Sparse MatrixPandas:将 DataFrame 与稀疏矩阵连接起来
【发布时间】:2017-12-02 08:16:13
【问题描述】:
我正在做一些基本的机器学习,并有一个由 TFIDF 生成的稀疏矩阵,如下所示:
<983x33599 sparse matrix of type '<type 'numpy.float64'>'
with 232944 stored elements in Compressed Sparse Row format>
然后我有一个带有title 列的DataFrame。我想将它们组合成一个 DataFrame,但是当我尝试使用 concat 时,我发现我无法将 DataFrame 与非 DataFrame 对象组合起来。
我该如何解决这个问题?
谢谢!
【问题讨论】:
标签:
python
pandas
dataframe
【解决方案1】:
考虑以下演示:
来源 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.concat、join、merge 等 - 我们将失去“稀疏性”,因为所有这些方法都会生成合并 DataFrame 的新常规(非稀疏)副本
【讨论】:
-
请注意,SparseDataFrame 在 Pandas 1.0 中已被删除。 source
【解决方案2】:
也许您可以在进行连接之前尝试在稀疏矩阵上使用to_dense(),然后使用to_sparse() 转换回稀疏矩阵。希望对您有所帮助。