处理大型pandas数据帧

问题描述 投票:2回答:3

更新的问题:

我有一个稀疏的120000x14000矩阵。然后我想做一些矩阵代数:

c = np.sum(indM, axis=1).T
w = np.diag(1 / np.array(c)[0]) # Fails with memory error
w = sparse.eye(len(indM), dtype=np.float)/np.array(c)[0] # Fails with memory error
w = np.nan_to_num(w)
u = w @ indM # Fails with 'Object types not supported'
u_avg = np.array(np.sum(u, axis=0) / np.sum(indM, axis=0))[0]

所以问题在于,当在对角线中创建具有非整数的对角矩阵时,上述首先失败并且存在记忆错误。如果我设法继续进行,内核以某种方式不会将“对象”识别为支持的类型,这意味着我不能做稀疏矩阵,我想?

你推荐我做什么?

python pandas parallel-processing sparse-matrix matrix-multiplication
3个回答
2
投票

尝试使用numpy的总和。根据我的经验,在性能方面,它往往会将其他东西从水中吹走。

import numpy as np
c = np.sum(indM,axis=1)

1
投票

听起来你没有足够的RAM来处理这么大的数组。这里显而易见的选择是使用来自scipy.sparse的方法,但是你说你已经尝试过但仍然遇到内存问题。幸运的是,还有一些其他选择:

  1. 将您的数据帧更改为numpy数组(这可能会减少内存开销)
  2. 您可以使用numpy.memmap将数组映射到磁盘上以二进制形式存储的位置。
  3. 以精度为代价,您可以将任何浮点数的dtypefloat64(默认值)更改为float32
  4. 如果您从.csv文件加载数据,pd.read_csv有一个选项chunksize,它允许您以块的形式读取数据。

0
投票

尝试使用像Kaggle这样的基于云的资源。可用的处理能力可能高于您的机器。

© www.soinside.com 2019 - 2024. All rights reserved.