【问题标题】:How to convert pandas dataframe to a sparse matrix using scipy's csr_matrix?如何使用 scipy 的 csr_matrix 将 pandas 数据帧转换为稀疏矩阵?
【发布时间】:2020-11-25 20:48:53
【问题描述】:

我想使用 scipy 库中的 csr_matrix 将 DataFrame 转换为稀疏矩阵,但首先我必须将其转换为 SparseDataFrame。在以前的 pandas 版本中,我使用 pd.SparseDataFrame(df).to_coo() 来实现此目的,但由于 pandas 1.0.0 已弃用此方法。有谁知道如何使用最新的 pandas api 执行这种转换。我使用了这个迁移guide 并尝试了各种组合,但仍然无法达到预期的结果。 按照指南,当我执行以下操作时

csr_matrix(pd.DataFrame.sparse.from_spmatrix(df).to_coo())

我收到此错误

AttributeError: 'DataFrame' object has no attribute 'tocsc'

谁能帮我解决这个问题?我也确实找到了其他帖子,但在我的情况下无法帮助我linklinklink

【问题讨论】:

  • 除非很明显是什么导致了错误,否则总是包含完整的回溯。

标签: python pandas scipy sparse-matrix


【解决方案1】:

IIUC 并使用您分享的第三个链接,您可以使用 pd.SparseDtype 将您的 df 数据转换为稀疏数据,就像这样

df_sparsed = df.astype(pd.SparseDtype("float", np.nan)

您可以阅读更多关于 pd.SparseDtype here 的信息来为您的数据选择正确的参数,然后在上面的命令中使用它,如下所示:

csr_matrix(df_sparsed.sparse.to_coo()) # Note you need .sparse accessor to access .to_coo()

一个简单的班轮将是

csr_matrix(df.astype(pd.SparseDtype("float", np.nan)).sparse.to_coo())

【讨论】:

    猜你喜欢
    • 2021-02-01
    • 2016-08-03
    • 2023-04-10
    • 2020-11-26
    • 2016-09-19
    • 2014-12-21
    • 2020-12-07
    • 2013-12-25
    • 2019-08-17
    相关资源
    最近更新 更多