【问题标题】:Reading large CSV file with Pandas freezes computer使用 Pandas 读取大型 CSV 文件会冻结计算机
【发布时间】:2019-02-22 12:38:02
【问题描述】:

我正在使用 Python 处理一个相对较大的 CSV 文件。我正在使用 pandas read_csv 函数来导入它。数据位于工作共享文件夹中,大小约为 25 GB。

我有 2x8 GB RAM 和 Intel Core i5 处理器并使用 juypter 笔记本电脑。加载文件时,RAM 监控上升到 100%。它保持在 100% 或 96% 几分钟,然后我的计算机时钟停止,我的屏幕被冻结。即使等了 2 个小时,我的电脑也无法使用了,所以我必须重新启动。

我的问题是: 我需要拆分数据吗?这有帮助吗?还是我的笔记本电脑的一般性能问题?

这是我第一次使用如此“大”的数据集(我仍然认为 25 GB 不算太多。)

【问题讨论】:

  • 这种情况发生了多少次?
  • 你正在达到你的物理内存限制,所以你正在观察你的交换文件被颠簸,如果数据不适合内存,你需要使用不同的方法,例如使用 pytableshdfs
  • @Denziloe 始终使用此文件
  • 你可能想看看 dask dask.pydata.org/en/latest/docs.html。我没有尝试过,但看起来很有希望。
  • 现在我正在尝试:tp = pd.read_csv('RawdataEurope.csv', iterator=True, chunksize=1000)df = concat(tp, ignore_index=True)

标签: python pandas csv


【解决方案1】:

查看read_csvdocumentation。有一个参数叫做nrows。它指出:

nrows : int,默认无

要读取的文件行数。对于读取大文件很有用

您可以一次只读取几行文件,这样就不会将整个文件加载到 RAM 中。

顺便说一句:使用类似的东西:

with open(my_file) as f:
    for line in f:
        ...

一次只会将一行加载到内存中。

【讨论】:

    【解决方案2】:

    您可能正在将所有数据加载到 RAM 中,因此分配了所有可用内存,迫使您的系统依赖交换内存(将临时数据写入磁盘,这要慢得多)。

    如果您将数据拆分为适合您内存的块,它应该可以解决问题。也许每个 1 GB?

    【讨论】:

      【解决方案3】:

      对于大文件,pandas 可以分块读取。

      chunksize = 10 ** 6
      for chunk in pd.read_csv(filename, chunksize=chunksize):
          process(chunk)
      

      【讨论】:

        猜你喜欢
        • 2016-11-09
        • 2014-11-15
        • 2023-02-20
        • 1970-01-01
        • 2018-02-02
        相关资源
        最近更新 更多