首页 > 解决方案 > 处理大型数据集时发生内存错误

问题描述

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

Each of Length - 107952899

面临的问题

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

转换为 df 的原因

我必须做一些计算,熊猫让它更容易,所以我更喜欢用熊猫做。我相信三个 numpy 数组的内存大小超过 3 Gb 甚至更多。

系统详情:

8Gb RAM python 3.6.3

要求

我理解这种错误的原因但是有没有可能避免 MemoryError 或其他一些要遵循的最佳实践?

标签: pythonpandasnumpyerror-handlingout-of-memory

解决方案


当我将这三个 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 的 RAM。如果将它乘以 10 倍(以获得 3 Gb 数据而不是我的 300),您将达到 90 Gb,这可能比您的 Ram + 可用交换还多,这将提高MemoryError.

但如果相反,你这样做:

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

那么您的内存使用量不会比您的三个数组之一大得多。

我怀疑是你的问题...


推荐阅读