我正在从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变成稀疏矩阵?先谢谢你。
guz6ccqo1#
df.values是一个numpy数组,用这种方法访问值总是比np.array快。
df.values
np.array
scipy.sparse.csr_matrix(df.values)
您可能需要先进行转置,如df.values.T。在DataFrame中,列是轴0。
df.values.T
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矩阵。
to_coo
pd.DataFrame
df.astype(pd.SparseDtype("float64",0))
ou6hu8tu3#
有一种方法可以做到这一点,而不必在途中转换为密集:csr_sparse_matrix = df.sparse.to_coo().tocsr()
csr_sparse_matrix = df.sparse.to_coo().tocsr()
3条答案
按热度按时间guz6ccqo1#
df.values
是一个numpy数组,用这种方法访问值总是比np.array
快。您可能需要先进行转置,如
df.values.T
。在DataFrame中,列是轴0。ovfsdjhp2#
解决方法:
说明:
to_coo
需要pd.DataFrame
为稀疏格式,因此需要将 Dataframe 转换为稀疏数据类型:df.astype(pd.SparseDtype("float64",0))
在将其转换为COO矩阵之后,可以将其转换为CSR矩阵。
ou6hu8tu3#
有一种方法可以做到这一点,而不必在途中转换为密集:
csr_sparse_matrix = df.sparse.to_coo().tocsr()