2017-02-08 2 views
0

У меня большой размер csv-файла, примерно 6gb, и на загрузку python требуется много времени. Я получаю следующее сообщение об ошибке:Ошибки при загрузке файла .csv с использованием pandas в 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, но это тоже не сработало.

Я не уверен, что «не может выделить регион» означает, возможно ли, что заголовок включает «область», а панды не могут найти столбец внизу?

+1

вам нужно прочитать файл в куски. Используйте параметр 'chunksize' –

+0

Просто голова по другой причине этого в pandas 0.20.3, у меня есть ошибка ***: нельзя выделить область *** установить точку останова в malloc_error_break для отладки ошибки в скрипте, который Я последний раз работал в предыдущей версии pandas. Причиной в этом случае или, по крайней мере, тем, что исправила ошибку, была опция low_memory = False. Скрипт загружает большой набор данных (1.2Gb), но имеет 32 ГБ ОЗУ, и он и большие наборы данных загружаются с радостью на одном компьютере, но мой скрипт не удалось выполнить с помощью df = pd.read_csv (имя_файла, low_memory = False), пока low_memory = False был удален. – jnPy

ответ

0

Ошибка памяти из-за ОЗУ. Для этого нет другого объяснения.

Sum of all data memory-overheads for in-RAM objects !< RAM

malloc: *** mach_vm_map(size=18446744071562067968) failed Вы можете четко понять из этого сообщения об ошибке.

Попробуйте использовать.

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

Или, если читаете этот файл CSV является лишь частью вашей программы, и если есть какие-либо другие dataframes созданные раньше, попробуйте очистить их, если они не используются.

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

`

+0

Привет, спасибо за ваш комментарий. Почему я должен получить следующее сообщение об ошибке: Python (5431,0x7fffa37773c0) malloc: *** mach_vm_map (размер = 18446744071562067968) не удалось (код ошибки = 3) *** ошибка: не может выделить область *** установить a точка останова в malloc_error_break для отладки Python (5431,0x7fffa37773c0) malloc: *** ошибка для объекта 0x104623257: указатель освобожден не был назначен *** установить точку останова в malloc_error_break для отладки – song0089

+0

@ song0089 'malloc' meands' memory alloc' , кажется, что есть некоторая проблема с распределением свободной памяти для хранения вашего фрейма. Он начинается с указателя, а затем каждая строка вашего фреймворка сохраняется в вашей памяти, и указатель увеличивается каждый раз, , как вы могли видеть, в 'object 0x104623257' (который может быть в некоторой n-й строке) указатель больше не имеет бесплатный адрес (т.е. память), где он может указывать, что строка должна быть сохранена, поэтому вы получаете эту ошибку. Если вы удовлетворены, любезно поддержите/принимайте ответ, так как здесь распространенная практика. – Shubham

Смежные вопросы