从SciPy稀疏的Coo矩阵中填充Pandas稀疏数据框(SparseDataFrame)

3
这个问题涉及到"如何从SciPy稀疏矩阵生成Pandas SparseDataFrame"。我想要从一个scipy.sparse.coo_matrix(具体来说)生成SparseDataFrame。前面提到的问题是针对另一种SciPy稀疏矩阵(csr)的......

我注意到Pandas现在支持稀疏矩阵和数组(support for Sparse Matrices and Arrays)。目前,我是这样创建DataFrame()的:

return DataFrame(matrix.toarray(), columns=features, index=observations)

有没有一种方法可以使用 scipy.sparse.coo_matrix()coo_matrix() 创建一个 SparseDataFrame()?转换为密集格式会严重占用内存...!
1个回答

2

http://pandas.pydata.org/pandas-docs/stable/sparse.html#interaction-with-scipy-sparse

实现了一个方便的方法SparseSeries.from_coo(),用于从scipy.sparse.coo_matrix创建SparseSeries。
在scipy.sparse中,有将数据形式相互转换的方法。例如.tocoo,.tocsc等。因此,您可以使用最适合特定操作的任何形式。
对于反向操作,我已回答了Pandas sparse dataFrame to sparse matrix, without generating a dense matrix in memory
您链接的2013年的答案按行迭代-使用toarray使行变得密集。我没有看过pandas from_coo的代码。
关于pandas稀疏矩阵的更近期的SO问题: non-NDFFrame object error using pandas.SparseSeries.from_coo() function
来自https://github.com/pydata/pandas/blob/master/pandas/sparse/scipy_sparse.py
def _coo_to_sparse_series(A, dense_index=False):
    """ Convert a scipy.sparse.coo_matrix to a SparseSeries.
    Use the defaults given in the SparseSeries constructor. """
    s = Series(A.data, MultiIndex.from_arrays((A.row, A.col)))
    s = s.sort_index()
    s = s.to_sparse()  # TODO: specify kind?
    # ...
    return s

实际上,它使用构建 coo 矩阵所用的相同的 dataij,创建一个系列,对其进行排序,并将其转换为稀疏系列。

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