我想将大熊猫SparseDataFrame
转换为scipy.sparse.csc_matrix
。但我不想先将它转换回密集矩阵。
现在我有类似下面的内容。
df = pd.get_dummies(df, sparse=True)
基本上我需要的是从scipy.sparse.csc_matrix
进一步获得df
。有办法吗?
答案 0 :(得分:1)
感谢@ hpaulj的回复。我使用https://stackoverflow.com/a/38157234/7298911中的模板结束了它。
以下是修改后的实现。
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)
答案 1 :(得分:0)
我参加了各种稀疏的熊猫来解决sparce问题。
有一个Pandas方法可以将multiindex稀疏序列转换为coo矩阵:
http://pandas-docs.github.io/pandas-docs-travis/sparse.html#interaction-with-scipy-sparse
但请参阅Pandas sparse dataFrame to sparse matrix, without generating a dense matrix in memory 数据框稀疏。
和
How do I create a scipy sparse matrix from a pandas dataframe?
以及最近,How can I "sparsify" on two values?
获得coo
矩阵后,您可以轻松将其转换为csr
或csc
。
为避免混淆,我建议创建一个示例数据帧,转换为密集然后再稀疏。我们有一些具体的东西要测试。我曾经推荐过Pandas方法,却没有意识到MultiIndex与DataFrame不同。