处理大熊猫数据框

时间:2019-02-14 18:43:03

标签: python pandas parallel-processing sparse-matrix matrix-multiplication

更新的问题:

我有一个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]

所以问题是,当创建对角线中非整数的对角线矩阵时,以上内容首先因内存错误而失败。如果我设法进行处理,内核会以某种方式无法将“对象”识别为受支持的类型,这意味着我不能做稀疏矩阵?

你建议我做什么?

3 个答案:

答案 0 :(得分:2)

尝试使用numpy的总和。以我的经验,就性能而言,它往往会将其他东西吹倒。

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

答案 1 :(得分:1)

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

  1. 将您的数据框更改为numpy数组(这可以减少内存开销)

  2. 您可以使用numpy.memmap将阵列映射到磁盘上二进制中存储的位置

  3. 以精度为代价,您可以将任何浮点数的dtypefloat64(默认)更改为float32

  4. 如果您要从.csv文件加载数据,则pd.read_csv具有选项chunksize,该选项使您可以分块读取数据。

答案 2 :(得分:0)

尝试使用Kaggle之类的基于云的资源。那里可能有比计算机上更多的处理能力。