如果 A 是 csr_matrix,您可以使用 .toarray()(还有 .todense() 会产生 numpy matrix,这也适用于 DataFrame 构造函数):
df = pd.DataFrame(A.toarray())
然后您可以将其与pd.concat() 一起使用。
A = csr_matrix([[1, 0, 2], [0, 3, 0]])
(0, 0) 1
(0, 2) 2
(1, 1) 3
<class 'scipy.sparse.csr.csr_matrix'>
pd.DataFrame(A.todense())
0 1 2
0 1 0 2
1 0 3 0
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 3 columns):
0 2 non-null int64
1 2 non-null int64
2 2 non-null int64
在 0.20 版中,pandas 引入了sparse data structures,包括SparseDataFrame。
在 pandas 1.0 中,SparseDataFrame 是 removed:
在旧版本的 pandas 中,SparseSeries 和 SparseDataFrame 类是处理稀疏数据的首选方式。随着扩展数组的出现,不再需要这些子类。使用具有稀疏值的常规 Series 或 DataFrame 可以更好地实现它们的目的。
migration 指南展示了如何使用这些新的数据结构。
例如,从稀疏矩阵创建DataFrame:
from scipy.sparse import csr_matrix
A = csr_matrix([[1, 0, 2], [0, 3, 0]])
df = pd.DataFrame.sparse.from_spmatrix(A, columns=['A', 'B', 'C'])
df
A B C
0 1 0 2
1 0 3 0
df.dtypes
A Sparse[float64, 0]
B Sparse[float64, 0]
C Sparse[float64, 0]
dtype: object
或者,您可以将稀疏矩阵传递给sklearn,以避免在转换回pandas 时内存不足。只需将 numpy array 传递给 scipy.sparse.csr_matrix 构造函数,然后使用 scipy.sparse.hstack 进行组合,即可将其他数据转换为稀疏格式(请参阅 docs)。