【问题标题】:Pandas error while reading 14 GB csv file on 200 GB RAM workstation在 200 GB RAM 工作站上读取 14 GB csv 文件时出现 Pandas 错误
【发布时间】:2016-02-20 17:33:53
【问题描述】:

这是我通过家庭 id 生成文件的代码。然后我会分别分析每个家。

import pandas as pd
data = pd.read_csv("110homes.csv")
for i in (np.unique(data['dataid'])):
    print i
    d1 = pd.DataFrame(data[data['dataid']==i])
    k = str(i)
    d1.to_csv(k + ".csv")

但是,我收到此错误。这台机器有 200 GB RAM,它也显示内存错误:

    data = pd.read_csv("110homes.csv")
  File "/usr/lib/python2.7/site-packages/pandas/io/parsers.py", line 474, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/usr/lib/python2.7/site-packages/pandas/io/parsers.py", line 260, in _read
    return parser.read()
  File "/usr/lib/python2.7/site-packages/pandas/io/parsers.py", line 721, in read
    ret = self._engine.read(nrows)
  File "/usr/lib/python2.7/site-packages/pandas/io/parsers.py", line 1170, in read
    data = self._reader.read(nrows)
  File "pandas/parser.pyx", line 769, in pandas.parser.TextReader.read (pandas/parser.c:7544)
  File "pandas/parser.pyx", line 819, in pandas.parser.TextReader._read_low_memory (pandas/parser.c:8137)
  File "pandas/parser.pyx", line 1833, in pandas.parser._concatenate_chunks (pandas/parser.c:22383)
MemoryError

【问题讨论】:

  • 与您的 MemoryError 无关,但请查看 df.groupby 方法。这将使您阅读后的代码更加优雅
  • 您使用的是 32 位 Python 吗?它有 4G 限制——请参阅 pandas-memory-error
  • import struct print struct.calcsize("P") * 8 我运行了这个命令,它显示 64。所以我猜这不是问题
  • 为什么问题被否决?如果你不能回答这个问题,那么至少不要投反对票。有人无缘无故地对问题投反对票是荒谬的。这是一个合法的问题。

标签: python memory pandas large-files


【解决方案1】:

RAM 中的数据可能会比磁盘占用更多空间。如果没有看到您的 110homes.csv 文件,就不可能知道细节,但想象一下它每行包含 10 个浮点数,例如:0.0,1.0,2.0,...。在 CSV 中,每个分隔符占用 3 个字节 + 1 个字节。在 Python 中,每个浮点数占用 8 个字节(在 64 字节机器上),每个 Unicode 字符占用 2 个字节(另外 8 个字节),字符串长度占用 8 个字节,每个指针占用 8 个字节,每行占用字节数等。

这样想:在 64 位机器上,指针、本机 int 或本机浮点数的最小大小为 8 个字节。每个字段需要几个,每行需要几个。 RAM 与磁盘相比占用 15 倍,这并没有什么不寻常的。

做一个简单的测试:获取文件的前 10% 行,并在处理过程中通过top 监控 python。查看它使用了多少 RAM。它是否使用至少 20 GB?

【讨论】:

    猜你喜欢
    • 2015-03-28
    • 2019-09-15
    • 2015-11-09
    • 2016-11-24
    • 2021-07-13
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多