有效地将 pandas 数据帧转换为 scipy 稀疏矩阵

Efficiently converting pandas dataframe to scipy sparse matrix

我正在尝试将 pandas 数据框转换为 scipy 稀疏矩阵,作为一种有效处理许多功能的方法。

但是我没有找到一种有效的方法来访问数据框中的值,所以我在进行转换时总是 运行 内存不足。我尝试了下面的两种解决方案,但它们不起作用。我研究了很多但没有找到更好的东西。如果有人有建议,我很乐意进行测试。

sparse_array = sparse.csc_matrix(df.values)
sparse_array = sparse.csc_matrix(df.to_numpy())

如果您的数据帧非常稀疏,您可以将其转换 column-wise 然后堆叠:

from scipy import sparse

sparse_array = sparse.hstack([sparse.csc_matrix(df[i].values.reshape(-1, 1)) for i in df.columns])

但可能最好的办法是将它变成一个稀疏数据框:

for i in df.columns:
    df[i] = df[i].astype(pd.SparseDtype(df[i].dtype))

sparse_array = sparse.csc_matrix(df.sparse.to_coo())

(请注意,如果您的 dtype 在整个数据框中不均匀,则可能会出现问题)。