在200 GB RAM工作站上读取14 GB csv文件时出现Pandas错误

时间:2016-02-20 17:33:53

标签: python memory pandas large-files

这是我的家庭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

1 个答案:

答案 0 :(得分:0)

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吗?