Python 将帧转换为Scipy稀疏csc_矩阵
我想将pandasPython 将帧转换为Scipy稀疏csc_矩阵,python,pandas,numpy,scipy,Python,Pandas,Numpy,Scipy,我想将pandassparsaframe转换为scipy.sparse.csc_矩阵。但我不想先把它转换回稠密矩阵 现在我有一些类似下面的东西 df = pd.get_dummies(df, sparse=True) 基本上,我需要的是从df进一步获得scipy.sparse.csc_矩阵。有什么办法吗?我参加了各种稀疏熊猫来回答稀疏问题 有一种方法可以将多索引稀疏序列转换为coo矩阵: 但是看到了吗 对于稀疏的数据帧 及 最近, 一旦有了coo矩阵,就可以轻松地将其转换为csr或csc
sparsaframe
转换为scipy.sparse.csc_矩阵
。但我不想先把它转换回稠密矩阵
现在我有一些类似下面的东西
df = pd.get_dummies(df, sparse=True)
基本上,我需要的是从
df
进一步获得scipy.sparse.csc_矩阵。有什么办法吗?我参加了各种稀疏熊猫来回答稀疏问题
有一种方法可以将多索引稀疏序列转换为coo矩阵:
但是看到了吗
对于稀疏的数据帧
及
最近,
一旦有了coo
矩阵,就可以轻松地将其转换为csr
或csc
为了避免混淆,我建议创建一个示例数据帧,先转换为稠密数据帧,然后再转换为稀疏数据帧。我们有一些具体的东西要测试。我曾经推荐Pandas方法,但没有意识到多索引与DataFrame不同。多亏了@hpaulj的回复。我最终使用了来自的模板
下面是修改后的实现
def sparseDfToCsc(df):
columns = df.columns
dat, rows = map(list,zip(*[(df[col].sp_values-df[col].fill_value, df[col].sp_index.to_int_index().indices) for col in columns]))
cols = [np.ones_like(a)*i for (i,a) in enumerate(dat)]
datF, rowsF, colsF = np.concatenate(dat), np.concatenate(rows), np.concatenate(cols)
arr = sparse.coo_matrix((datF, (rowsF, colsF)), df.shape, dtype=np.float64)
return arr.tocsc()
df = pd.get_dummies(df, sparse=True)
cscMatrix = sparseDfToCsc(df)
感谢@hpaulj的回复。如果我理解正确的话,最好的方法应该是。对吗?