如何从数据帧创建 sparse_matrix?内存错误

问题描述

我有一个大小为 78,000,000 行 x 14 列的数据框。我想从中得到一个稀疏矩阵用于数据训练。为此,我使用 pd dummies 进行转换。我得到了一个 78,000 行 x 1100 列的数据框。接下来,我创建了一个 lil_matrix 并尝试填充它,但我的内存不足。我有 32 GB 的内存。

请告诉我我该怎么做? 这是我将数据帧转换为 sparse_matrix 的代码

my_arr = lil_matrix(df.shape,dtype=np.uint8)
for i,column in enumerate(df.columns):
    inx = df[column] != 0
    my_arr[np.where(inx),i] = 1

my_arr.tocsr()

更新: scipy.sparse.csr_matrix(df.values) 无效,因为 df.values 占用大量内存,并不能解决我的问题。

更新 2: 我无法添加跟踪,因为当它达到 32 GB 时,内核会重新启动。我可以补充一点,它占用了大量内存,没有足够的 RAM。 enter image description here

更新 3: 昵称 CJR 的用户提出了一个很酷的提示。要将 DataFrame 转换为稀疏矩阵,只需执行以下操作:

Data_frame_csr = pd.get_dummies(Data_frame,columns=[name1,name2 ...,nameN],dummy_na=True,sparse=True).sparse.to_coo().tocsr()

dummy_na - 考虑到等于 Nan 的值(参见文档)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)