把稀疏的csr变成Pandas?

2024-04-29 09:42:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我用过

sklearn.preprocessing.OneHotEncoder

要转换某些数据,输出是scipy.sparse.csr.csr_matrix 如何将它与其他列一起合并回原始数据帧?

我试着用pd.concat但是

TypeError: cannot concatenate a non-NDFrame object

谢谢


Tags: 数据原始数据scipysklearnmatrixpdsparsenon
2条回答

在创建编码器时,通过将参数sparse设置为False,还可以避免首先返回稀疏矩阵。

OneHotEncoder的文档说明:

sparse : boolean, default=True

Will return sparse matrix if set True else will return an array.

然后,您可以再次调用DataFrame构造函数将numpy数组转换为DataFrame。

如果A是csr_matrix,则可以使用^{}(还有.todense()生成numpymatrix,这也适用于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,包括^{}

或者,可以将稀疏矩阵传递给sklearn,以避免在转换回pandas时内存不足。只需通过将numpyarray传递给scipy.sparse.csr_matrix构造函数并使用scipy.sparse.hstack来将其他数据转换为稀疏格式(请参见docs)。

相关问题 更多 >