【问题标题】: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.concatjoinmerge 等 - 我们将失去“稀疏性”,因为所有这些方法都会生成合并 DataFrame 的新常规(非稀疏)副本

    【讨论】:

    • 请注意,SparseDataFrame 在 Pandas 1.0 中已被删除。 source
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 2017-06-15
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 2023-04-10
      • 2021-11-25
      相关资源
      最近更新 更多