从稀疏矩阵创建行、列、数据 pandas 数据框
create row, column, data pandas dataframe from sparse matrix
如何创建 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 序列化并将数据解释为 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 数组
您要放入数据框中的值可用
a_coo.row, a_coo.col, a_coo.data
如何创建 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 序列化并将数据解释为 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 数组
您要放入数据框中的值可用
a_coo.row, a_coo.col, a_coo.data