【问题标题】:Errors when loading .csv file using pandas in python在 python 中使用 pandas 加载 .csv 文件时出错
【发布时间】:2017-02-08 13:52:52
【问题描述】:

我有一个大的 csv 文件,大约 6gb,加载到 python 需要很长时间。我收到以下错误:

import pandas as pd
df = pd.read_csv('nyc311.csv', low_memory=False)


Python(1284,0x7fffa37773c0) malloc: *** mach_vm_map(size=18446744071562067968) failed (error code=3)
*** error: can't allocate region
*** set a breakpoint in malloc_error_break to debug
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py", line 646, in parser_f
    return _read(filepath_or_buffer, kwds)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py", line 401, in _read
    data = parser.read()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py", line 939, in read
    ret = self._engine.read(nrows)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pandas/io/parsers.py", line 1508, in read
    data = self._reader.read(nrows)
  File "pandas/parser.pyx", line 851, in pandas.parser.TextReader.read (pandas/parser.c:10438)
  File "pandas/parser.pyx", line 939, in pandas.parser.TextReader._read_rows (pandas/parser.c:11607)
  File "pandas/parser.pyx", line 2024, in pandas.parser.raise_parser_error (pandas/parser.c:27037)
pandas.io.common.CParserError: Error tokenizing data. C error: out of memory

我不认为我理解错误代码,最后一行似乎暗示文件太大而无法加载?我也尝试了low_memory=FALSE 选项,但这也不起作用。

我不确定“无法分配区域”是什么意思,是否有可能标题包含“区域”而 pandas 无法找到下面的列?

【问题讨论】:

  • 你需要分块读取文件。使用chunksize参数
  • 只是在pandas 0.20.3中发现另一个原因,我有***错误:无法分配区域***在malloc_error_break中设置断点以调试脚本中的错误我上次在以前的熊猫版本中运行。在这种情况下,或者至少是纠正错误的原因是 low_memory = False 选项。该脚本正在加载一个大型(1.2Gb)数据集,但有 32Gb 可用 RAM,并且它和更大的数据集可以在同一台机器上愉快地加载,但我的脚本在 df = pd.read_csv(datasetName, low_memory = False) 直到 low_memory = False 失败已删除。

标签: python csv pandas


【解决方案1】:

由于 RAM 导致内存不足问题。 对此没有其他解释。

内存中对象的所有数据内存开销的总和!

malloc: *** mach_vm_map(size=18446744071562067968) failed你可以从这个错误语句中清楚的理解。

尝试使用。

df = pd.read_csv('nyc311.csv',chunksize =5000,lineterminator='\r')

或者,如果读取此 csv 只是您程序的一部分,并且之前创建了任何其他数据帧,请尝试在不使用时清理它们。

import gc
del old_df              #clear dataframes not in use
gc.collect()        # collect Garbage 
del gc.garbage[:]   # Clears RAM

`

【讨论】:

  • 您好,感谢您的评论。为什么我会收到以下错误消息:Python(5431,0x7fffa37773c0) malloc: *** mach_vm_map(size=18446744071562067968) failed (error code=3) *** error: can't allocate region *** set a breakpoint in malloc_error_break 以调试 Python(5431,0x7fffa37773c0) malloc: *** 对象 0x104623257 的错误:未分配被释放的指针 *** 在 malloc_error_break 中设置断点以进行调试
  • @song0089 malloc 表示 memory allocation ,分配可用内存来存储数据帧似乎存在一些问题。它以一个指针开始,然后数据帧的每一行都保存在内存中,并且每次都会增加指针,如您所见,在object 0x104623257(可能是第 n 行)指针没有更多的空闲地址(即内存)它可以指向要存储该行的位置,这就是您收到此错误的原因。如果您满意,请点赞/接受答案,因为这是这里的常见做法。
猜你喜欢
  • 1970-01-01
  • 2022-07-25
  • 2020-11-19
  • 2020-01-29
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 2020-10-30
  • 1970-01-01
相关资源
最近更新 更多