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

How to convert pandas dataframe to a sparse matrix using scipy's csr_matrix?

我想使用 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'

谁能帮我解决这个问题?我也确实找到了其他帖子,但对我的情况没有帮助 link link

IIUC 并使用您共享的第三个 link,您可以使用 pd.SparseDtypedf 数据转换为稀疏数据,像这样

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