使用大型数据集时发生内存错误

时间:2019-02-07 14:12:34

标签: python pandas numpy error-handling out-of-memory

我有3个numpy数组的内插数据。

Each of Length - 107952899

问题面对

当我将这三个numpy数组组合为pandas df时,我得到了MemoryError

转换为df的原因

我必须做一些计算,大熊猫使其变得更容易,所以我更喜欢大熊猫。 我相信三个numpy阵列的内存大小会超过3 Gb,甚至更多。

系统详细信息:

8Gb RAM python 3.6.3

要求

我了解发生此类错误的原因 但是有没有可能避免MemoryError或其他可以遵循的最佳实践?

1 个答案:

答案 0 :(得分:2)

  

当我将这三个numpy数组组合为pandas df时,出现MemoryError。

假设您这样做:

import numpy as np
import pandas as pd

big_array_1 = np.array(np.random.random(10**7))
big_array_2 = np.array(np.random.random(10**7))
big_array_3 = np.array(np.random.random(10**7))

在我的计算机上,它需要大约300 MB的内存。

然后,如果我这样做:

df = pd.DataFrame([big_array_1,big_array_2, big_array_3])

内存飙升至9Gb。如果将它乘以10倍(以获得3 Gb的数据而不是我的300的数据),则将增加到90 Gb,这可能比Ram +可用交换的价格还要多,这将引发MemoryError

但是,相反,您可以这样做:

df = pd.DataFrame({"A":big_array_1, "B": big_array_2, "C":big_array_3})

然后,您的内存使用量将不会明显大于三个阵列之一。

我怀疑这是您的问题...