2017-02-08 4 views
0

Ich habe eine große CSV-Datei, ca. 6 GB, und es dauert eine lange Zeit, um auf Python zu laden. Ich erhalte die folgende Fehlermeldung:Fehler beim Laden von .csv-Datei mit Pandas in 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 

Ich glaube nicht, dass ich den Fehlercode bin zu verstehen, die letzte Zeile scheint darauf hinzudeuten, dass die Datei zu groß ist, zu laden? Ich habe auch versucht low_memory=FALSE Option, aber das hat auch nicht funktioniert.

Ich bin mir nicht sicher, was "Region nicht zuordnen" bedeuten kann, könnte es möglich sein, dass die Kopfzeile "Region" enthält und Pandas die Spalte darunter nicht finden können?

+1

müssen Sie die Datei in Stücke lesen. Verwenden Sie den 'Chunksize' Parameter –

+0

Nur ein Kopf auf eine andere Ursache davon in Pandas 0.20.3, ich habe die *** Fehler: kann nicht Region *** zuordnen einen Haltepunkt in malloc_error_break zu Debug-Fehler in einem Skript, dass Ich lief zuletzt in einer früheren Pandas Version. Die Ursache in diesem Fall oder zumindest die Sache, die den Fehler behoben hat, war die Option low_memory = False. Das Skript lädt ein großes (1,2 GB) Dataset, aber mit 32 GB RAM und es lädt größere Datensätze glücklich auf demselben Rechner, aber mein Skript ist fehlgeschlagen bei df = pd.read_csv (DatasetName, low_memory = False) bis low_memory = False wurde entfernt. – jnPy

Antwort

0

Nicht genügend Arbeitsspeicher wegen RAM. Es gibt keine andere Erklärung dafür.

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

malloc: *** mach_vm_map(size=18446744071562067968) failed Sie können deutlich von dieser Fehler Aussage verstehen.

Versuchen Sie mit.

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

Oder, wenn diese csv lesen ist nur ein Teil des Programms, und wenn es irgendwelche anderen Datenrahmen vor erstellt ist, versucht sie, wenn sie nicht in Gebrauch zu reinigen.

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

`

+0

Hallo, danke für deinen Kommentar. Warum sollte ich die folgende Fehlermeldung erhalten: Python (5431,0x7fffa37773c0) malloc: *** mach_vm_map (Größe = 18446744071562067968) fehlgeschlagen (Fehlercode = 3) *** Fehler: kann keine Region zuordnen *** set a Breakpoint in malloc_error_break zu debuggen Python (5431,0x7fffa37773c0) malloc: *** Fehler für Objekt 0x104623257: Zeiger freigegeben wurde nicht zugewiesen *** Legen Sie einen Haltepunkt in malloc_error_break zu debuggen – song0089

+0

@ song0089 'malloc' meands' Speicherzuordnung' Es scheint ein Problem mit der Zuweisung von freiem Speicher zum Speichern Ihres Datenrahmens zu bestehen. Es beginnt mit einem Zeiger, und dann wird jede Zeile Ihres Datenrahmens in Ihrem Speicher gespeichert und der Zeiger wird jedesmal erhöht, wie Sie sehen konnten, bei 'Objekt 0x104623257' (was vielleicht eine n-te Zeile) hat der Zeiger nicht mehr freie Adresse (dh Speicher), wo es auf die zu speichernde Zeile hinweisen könnte, deshalb erhalten Sie diesen Fehler. Wenn Sie zufrieden sind, upvote/Antwort annehmen, wie es hier üblich ist. – Shubham

Verwandte Themen