首页 > 解决方案 > 有效地将 pandas 数据帧转换为 scipy 稀疏矩阵

问题描述

我正在尝试将 pandas Dataframe 转换为 scipy 稀疏矩阵,以有效地使用许多功能。

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

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

标签: pythonpandasdataframescipysparse-matrix

解决方案


如果您的数据框非常稀疏,您可以按列转换,然后堆叠:

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 在整个数据框中不均匀,则可能会出现问题)。


推荐阅读