如何使用scipy的csr_matrix将熊猫数据帧转换为稀疏矩阵?

时间:2020-08-05 16:08:48

标签: python pandas scipy sparse-matrix

我想使用scipy库中的csr_matrix将DataFrame转换为稀疏矩阵,但是首先我必须将其转换为SparseDataFrame。在以前的熊猫版本中,出于这种目的,我使用了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'

有人可以帮我解决这个问题吗?另外,我确实找到了其他帖子,但在我的情况下无法帮助我link link link

1 个答案:

答案 0 :(得分:1)

IIUC并使用您共享的第三个链接,您可以像这样使用dfpd.SparseDtype数据转换为稀疏数据

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())