【问题标题】:create row, column, data pandas dataframe from sparse matrix从稀疏矩阵创建行、列、数据 pandas 数据框
【发布时间】:2021-10-11 06:22:26
【问题描述】:

如何以 COO 格式创建稀疏矩阵,并使 pandas 数据框不会嵌套到密集布局,但保持 row,column,data 的 COO 格式?

import numpy as np
import pandas as pd
from scipy.sparse import csr_matrix
from scipy.sparse import coo_matrix

a = np.eye(7)
a_csr = csr_matrix(a)
a_coo = a_csr.tocoo()
print(a_coo)
  (0, 0)    1.0
  (1, 1)    1.0
  (2, 2)    1.0
  (3, 3)    1.0
  (4, 4)    1.0
  (5, 5)    1.0
  (6, 6)    1.0

即我怎样才能从中获得一个不会取消嵌套的 pandas 数据框

pd.DataFrame.sparse.from_spmatrix(a_coo)

但保持row,column,data 格式在print 操作中也可视化?

【问题讨论】:

  • 基本上我想获取矩阵市场格式(MTX)的熊猫数据框。
  • a_coo.row, a_coo.col, a_coo.data
  • 真的 ;) 好的,这本来可以很容易的。当然比 mmwrite 解决方法更好。你想写这个作为答案吗?

标签: python pandas numpy scipy sparse-matrix


【解决方案1】:

一种可能的解决方法是使用 mtx 序列化并将数据解释为 CSV。

from scipy import io
io.mmwrite('sparse_thing', a_csr)
!cat sparse_thing.mtx

sparse_mtx_mm_df = pd.read_csv('sparse_thing.mtx', sep=' ', skiprows=3, header=None)
sparse_mtx_mm_df.columns = ['row', 'column', 'data_value']
sparse_mtx_mm_df

是否有更好的(本机、非基于序列化的)解决方案?

re_sparsed = coo_matrix((sparse_mtx_mm_df['data_value'].values, (sparse_mtx_mm_df.numpy_row.values, sparse_mtx_mm_df.numpy_column.values)))
re_sparsed.todense()

然后会返回初始的 numpy 数组

【讨论】:

    【解决方案2】:

    您要放入数据框中的值可用作

    a_coo.row, a_coo.col, a_coo.data
    

    【讨论】:

      猜你喜欢
      • 2014-11-30
      • 2017-02-17
      • 1970-01-01
      • 2019-03-10
      • 2016-01-04
      • 2018-08-03
      • 2022-06-12
      相关资源
      最近更新 更多