gpt4 book ai didi

python - 某个 skiprows 参数后的 pandas 内存错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:53 24 4
gpt4 key购买 nike

我有一个约 1.81GB 的 CSV 文件,其中包含约 4900 万行。它只有一列包含 38 个字符的字符串。

我正在 Digital Ocean VPS(Ubuntu 12.04.4、Python 2.7、pandas 0.18.0、512MB RAM)上使用 read_csv 阅读此文件。我一次读了 5000 行。但是,它在 skiprows = 2800000 处开始引发错误。这是我在重新启动的计算机上测试的代码,刚开始使用 Python:

>>> pd.read_csv(filename, skiprows=2800000, nrows=5000, header=None)

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/ayhan/.conda/envs/swrm/lib/python2.7/site-packages/pandas/io/parsers.py", line 529, in parser_f
return _read(filepath_or_buffer, kwds)
File "/home/ayhan/.conda/envs/swrm/lib/python2.7/site-packages/pandas/io/parsers.py", line 295, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "/home/ayhan/.conda/envs/swrm/lib/python2.7/site-packages/pandas/io/parsers.py", line 608, in __init__
self.options, self.engine = self._clean_options(options, engine)
File "/home/ayhan/.conda/envs/swrm/lib/python2.7/site-packages/pandas/io/parsers.py", line 731, in _clean_options
skiprows = set() if skiprows is None else set(skiprows)
MemoryError

如果我使用 skiprows=1000000 运行它,它工作正常。如果我尝试 skiprows=1500000,它会再次引发错误,这很奇怪,因为错误是在达到 2800000 之后开始的。在此之前,它每隔 5000 个乘数就通过一次,没有问题。知道为什么会这样吗?

代码在我的个人电脑上运行良好:

df = pd.read_csv(filename, skiprows=2800000, nrows=5000, header=None)

df.memory_usage()
Out[25]:
Index 72
0 40000
dtype: int64

编辑:

原来的循环是这样的:

current_chunk = 560 
chnksize = 5000

for chunk in range(current_chunk, 1000):
df = pd.read_csv(filename, skiprows=chnksize*chunk, nrows=chnksize, header=None)
out = "chunk_" + format(chunk, "06d")
short_ids = df[0].str.slice(-11)

它从 API 查询 short_id 并将结果附加到文件中。但是我在顶部给出的代码片段本身会引发错误。

最佳答案

问题是 skiprows 不会阻止在内存中加载数据,从而导致内存错误。对于您的问题,您必须使用 chunk read_csv 的参数,而不是 nrows

关于python - 某个 skiprows 参数后的 pandas 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36874993/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com