scipy 直接将Pandas Dataframe 转换为稀疏Numpy矩阵

i2loujxw  于 2022-11-10  发布在  其他
关注(0)|答案(3)|浏览(298)

我正在从Pandas Dataframe 创建一个矩阵,如下所示:

dense_matrix = np.array(df.as_matrix(columns = None), dtype=bool).astype(np.int)

然后转化为稀疏矩阵,其中:

sparse_matrix = scipy.sparse.csr_matrix(dense_matrix)

有没有办法直接从df变成稀疏矩阵?
先谢谢你。

guz6ccqo

guz6ccqo1#

df.values是一个numpy数组,用这种方法访问值总是比np.array快。

scipy.sparse.csr_matrix(df.values)

您可能需要先进行转置,如df.values.T。在DataFrame中,列是轴0。

ovfsdjhp

ovfsdjhp2#

解决方法:

import pandas as pd
import scipy
from scipy.sparse import csr_matrix

csr_matrix = csr_matrix(df.astype(pd.SparseDtype("float64",0)).sparse.to_coo())

说明:
to_coo需要pd.DataFrame为稀疏格式,因此需要将 Dataframe 转换为稀疏数据类型:df.astype(pd.SparseDtype("float64",0))
在将其转换为COO矩阵之后,可以将其转换为CSR矩阵。

ou6hu8tu

ou6hu8tu3#

有一种方法可以做到这一点,而不必在途中转换为密集:csr_sparse_matrix = df.sparse.to_coo().tocsr()

相关问题