【问题标题】:Convert Pandas SparseDataframe to Scipy sparse csc_matrix将 Pandas SparseDataframe 转换为 Scipy 稀疏 csc_matrix
【发布时间】:2016-12-14 21:11:48
【问题描述】:

我想将熊猫 SparseDataFrame 转换为 scipy.sparse.csc_matrix。但我不想先将其转换回密集矩阵。

现在我有类似下面的东西。

df = pd.get_dummies(df, sparse=True)

基本上我需要的是进一步从df 获得scipy.sparse.csc_matrix。有什么办法吗?

【问题讨论】:

    标签: python pandas numpy scipy


    【解决方案1】:

    感谢@hpaulj 的回复。我最终使用了来自https://stackoverflow.com/a/38157234/7298911 的模板。

    这是修改后的实现。

    def sparseDfToCsc(df):
        columns = df.columns
        dat, rows = map(list,zip(*[(df[col].sp_values-df[col].fill_value, df[col].sp_index.to_int_index().indices) for col in columns]))
        cols = [np.ones_like(a)*i for (i,a) in enumerate(dat)]
        datF, rowsF, colsF = np.concatenate(dat), np.concatenate(rows), np.concatenate(cols)
        arr = sparse.coo_matrix((datF, (rowsF, colsF)), df.shape, dtype=np.float64)
        return arr.tocsc()
    
    df = pd.get_dummies(df, sparse=True)
    cscMatrix = sparseDfToCsc(df)
    

    【讨论】:

      【解决方案2】:

      我参加过各种sparse Pandas to scipy sparce questions。

      有一种将多索引稀疏序列转换为 coo 矩阵的 Pandas 方法:

      http://pandas-docs.github.io/pandas-docs-travis/sparse.html#interaction-with-scipy-sparse

      但是请看Pandas sparse dataFrame to sparse matrix, without generating a dense matrix in memory 用于稀疏数据框。

      和

      How do I create a scipy sparse matrix from a pandas dataframe?

      最近,How can I "sparsify" on two values?

      拥有coo 矩阵后,您可以轻松地将其转换为csr 或csc。

      为避免混淆,我建议创建一个示例数据框,先转换为密集然后再转换为稀疏。我们有一些具体的东西要测试。我曾经推荐过 Pandas 方法,但没有意识到 MultiIndex 与 DataFrame 不同。

      【讨论】:

      猜你喜欢
      • 2013-07-23
      • 2016-08-03
      • 2016-03-14
      • 2020-11-26
      • 2023-04-10
      • 2016-08-26
      • 2018-11-12
      • 2021-02-01
      • 1970-01-01
      相关资源
      最近更新 更多