从SciPy Sparse Coo Matrix填充Pandas SparseDataFrame

时间:2015-12-09 14:37:10

标签: python numpy pandas scipy sparse-matrix

(这个问题与"populate a Pandas SparseDataFrame from a SciPy Sparse Matrix"有关。我想从scipy.sparse填充SparseDataFrame。 coo _matrix(具体)提到的问题是针对不同的SciPy稀疏矩阵( CSR )... 所以这里......)

我注意到熊猫现在有support for Sparse Matrices and Arrays。目前,我创建了这样的DataFrame()

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

有没有办法用SparseDataFrame()scipy.sparse.coo_matrix()创建coo_matrix()?转换为密集格式会严重影响RAM。谢谢!

1 个答案:

答案 0 :(得分: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使行密集。我没看过大熊猫from_coo做了什么。

关于熊猫稀疏的最新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

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