这是我的家庭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
答案 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吗?