Python 在200 GB RAM工作站上读取14 GB csv文件时出错
这是我根据家庭id生成文件的代码。然后我将分别分析每个家庭Python 在200 GB RAM工作站上读取14 GB csv文件时出错,python,memory,pandas,large-files,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,
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
RAM中的数据可能比磁盘上的数据占用更多的空间。如果看不到您的
110homes.csv
文件,就不可能知道详细信息,但想象一下它每行由10个浮点数组成,如:0.0,1.0,2.0,
。在CSV中,每一个都使用3个字节+1个字节作为分隔符。在Python中,每个浮点值需要8个字节(在64字节的机器上),每个Unicode字符需要2个字节(另8个字节),字符串长度需要8个字节,每个指针需要8个字节,每行需要8个字节,等等
请这样想:在64位机器上,指针、本机int或本机float的最小大小为8字节。每个字段需要几个,每行还需要几个。与磁盘相比,RAM增加15倍并没有什么不寻常之处
做一个简单的测试:取文件的前10%行,在python处理时通过
top
监视它。看看它使用了多少内存。它至少使用20 GB吗?RAM中的数据可能比磁盘上的数据占用更多的空间。如果看不到您的110homes.csv
文件,就不可能知道详细信息,但想象一下它每行由10个浮点数组成,如:0.0,1.0,2.0,
。在CSV中,每一个都使用3个字节+1个字节作为分隔符。在Python中,每个浮点值需要8个字节(在64字节的机器上),每个Unicode字符需要2个字节(另8个字节),字符串长度需要8个字节,每个指针需要8个字节,每行需要8个字节,等等
请这样想:在64位机器上,指针、本机int或本机float的最小大小为8字节。每个字段需要几个,每行还需要几个。与磁盘相比,RAM增加15倍并没有什么不寻常之处
做一个简单的测试:取文件的前10%行,在python处理时通过
top
监视它。看看它使用了多少内存。它是否至少使用20 GB?与内存错误无关,但请查看df.groupby
方法。这将使阅读后的代码更加优雅。您使用的是32位Python吗?它有4G限制——请参阅import struct print struct.calcsize(“P”)*8我运行了这个命令,它显示64。所以这不是问题,我猜为什么问题被否决了?如果你不能回答这个问题,那么至少不要投反对票。有人无缘无故地否决了这个问题,真是可笑。这是一个合法的问题。与您的MemoryError无关,请看一下df.groupby
方法。这将使阅读后的代码更加优雅。您使用的是32位Python吗?它有4G限制——请参阅import struct print struct.calcsize(“P”)*8我运行了这个命令,它显示64。所以这不是问题,我猜为什么问题被否决了?如果你不能回答这个问题,那么至少不要投反对票。有人无缘无故地否决了这个问题,真是可笑。这是一个合法的问题。