将Pandas数据帧直接转换为Sparse Numpy Matrix

use*_*289 33 python numpy scipy pandas

我正在从Pandas数据帧创建一个矩阵,如下所示:

dense_matrix = np.array(df.as_matrix(columns = None), dtype=bool).astype(np.int)
Run Code Online (Sandbox Code Playgroud)

然后进入稀疏矩阵:

sparse_matrix = scipy.sparse.csr_matrix(dense_matrix)
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以从df直到稀疏矩阵?

提前致谢.

Dan*_*lan 48

df.values是一个numpy数组,以这种方式访问​​值总是比np.array.

scipy.sparse.csr_matrix(df.values)
Run Code Online (Sandbox Code Playgroud)

您可能需要先进行转置,例如df.values.T.在DataFrames中,列为轴0.

  • 另一种方法是执行例如 df.replace(0, np.nan).to_sparse(),这会导致稀疏的 DataFrame,而不是 scipy.sparse.csr_matrix ... (4认同)
  • 如果 df 是 SparseDataFrame,则 df.values 创建一个密集矩阵。对于大数据集不可行。 (2认同)
  • @Stan 在数据集非常大的情况下有什么解决方案? (2认同)

G. *_*hen 5

有一种方法可以做到这一点,而无需在途中转换为密集: csr_sparse_matrix = df.sparse.to_coo().tocsr()

  • `df` 必须是稀疏数据框。通过以下方式将密集数据帧转换为稀疏数据帧:`sparse_df = df.astype(pd.SparseDtype("float64",0)` (5认同)