DataFrame对象没有to_sparse属性。

4

1
https://github.com/pandas-dev/pandas/blob/ad190575aa75962d2d0eade2de81a5fe5a2e285b/doc/source/whatsnew/v1.0.0.rst#removal-of-prior-version-deprecationschanges - user17242583
2个回答

8

以下是pandas 1.0.0+中更新的稀疏转换


如何将密集矩阵转换为稀疏矩阵

使用适当的SparseDtype()(例如,int),结合DataFrame.astype()将DataFrame转换为稀疏矩阵。

>>> df = pd.DataFrame({'A': [1, 0, 0, 0, 1, 0]})
>>> df.dtypes
# A    int64
# dtype: object

>>> sdf = df.astype(pd.SparseDtype(int, fill_value=0))
>>> sdf.dtypes
# A    Sparse[int64, 0]
# dtype: object

或者使用字符串别名以缩短长度:

>>> sdf = df.astype('Sparse[int64, 0]')

如何将稀疏数据转换为密集数据

使用 DataFrame.sparse.to_dense() 函数:

>>> from scipy import sparse
>>> sdf = pd.DataFrame.sparse.from_spmatrix(sparse.eye(3), columns=list('ABC'))
>>> sdf.dtypes
# A    Sparse[float64, 0]
# B    Sparse[float64, 0]
# C    Sparse[float64, 0]
# dtype: object

>>> df = sdf.sparse.to_dense()
>>> df.dtypes
# A    float64
# B    float64
# C    float64
# dtype: object

如何将稀疏矩阵转换为 COO

使用DataFrame.sparse.to_coo()

>>> from scipy import sparse
>>> sdf = pd.DataFrame.sparse.from_spmatrix(sparse.eye(3), columns=list('ABC'))
>>> sdf.dtypes
# A    Sparse[float64, 0]
# B    Sparse[float64, 0]
# C    Sparse[float64, 0]
# dtype: object

>>> df = sdf.sparse.to_coo()
# <3x3 sparse matrix of type '<class 'numpy.float64'>'
#         with 3 stored elements in COOrdinate format>
# (0, 0)    1.0
# (1, 1)    1.0
# (2, 2)    1.0

1
对于将稀疏矩阵转换为密集矩阵,如果没有导入 scipy 似乎不会出现错误,那么需要在这里使用 scipy 吗? - user2165
1
@chen 如果您已经有一个支持的稀疏矩阵而不需要导入scipy,则不需要使用它。scipy.sparse仅在此处需要用于示例数据sparse.eye(3) - tdy

-1
你可以使用scipy来创建稀疏矩阵:
scipy.sparse.csr_matrix(df.values)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接