gpt4 book ai didi

python - 将 scipy 稀疏 csr 转换为 Pandas ?

转载 作者:IT老高 更新时间:2023-10-28 20:39:27 25 4
gpt4 key购买 nike

我用过

sklearn.preprocessing.OneHotEncoder

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

我尝试使用 pd.concat 但我得到了

TypeError: cannot concatenate a non-NDFrame object

谢谢

最佳答案

如果A是csr_matrix,可以使用.toarray() (还有产生 numpy matrix.todense(),它也适用于 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 中,SparseDataFrameremoved :

In older versions of pandas, the SparseSeries and SparseDataFrame classes were the preferred way to work with sparse data. With the advent of extension arrays, these subclasses are no longer needed. Their purpose is better served by using a regular Series or DataFrame with sparse values instead.

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

关于python - 将 scipy 稀疏 csr 转换为 Pandas ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36967666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com