处理大量数据时如何处理内存异常?

数据挖掘 Python 熊猫 麻木的
2022-02-05 20:32:43

我正在尝试开发一个 python 脚本,它以块的形式读取大型 CSV 文件(大约 1.2 GB 历史数据)并执行以下步骤:

  1. 备份文件
  2. 提取前一天交易的新记录,附加到原始/基础 CSV 文件并将数据存储在数据框中。
  3. 对大数据框执行数学运算
  4. 将大数据帧转换为 CSV 并存储在同一位置以供下一天处理。

类似的过程也在第二天运行,依此类推......

我在处理上面的第 3 步时遇到内存异常错误(可能第 1 步和第 2 步会消耗大部分内存 max-3GB 有限空间)。即使我扩展服务器中的空间,我也预见到一个问题,因为我的输入文件大小每天都会增加。

我需要每天浏览历史数据以进行数学运算以及日常交易,因此无法避免存储/访问包含历史数据的基本 CSV 文件,也无法购买云中的空间。

我曾用于pd.read_csv从 CSV 文件中分块读取记录,用于数学运算 pandas 和 numpy 已被使用。

该脚本在我的本地计算机上运行没有任何问题,但是在服务器上处理时我遇到了内存问题。所以,就代码而言,它似乎很好。

我相信,如果我可以将步骤 1 到 4 中的处理更改为更高效,则可以解决内存异常,并且可以在空间有限的情况下执行我的脚本。

有人可以建议处理上述步骤的最佳方法吗?

1个回答

当我的 python 脚本处理我的 12GB 和 35GB 文件时,我也遇到了类似的问题。它过去需要数周的时间来处理,并且多次失败。

您需要检查您的数学运算,如果它可以处理数据子集。就我而言,我终于能够将文件拆分为多个部分并在各个部分上运行数学运算。它有助于提高速度以及更好的异常处理。

如果您无法拆分文件,请检查您的代码是否可以批量工作。然后您可以分块读取文件(在 pd.read_csv 中您可以提供块大小),然后逐个输入您的公式。