Ich versuche etwas ziemlich Einfaches zu tun, indem ich eine große CSV-Datei in einen Pandas-Datenrahmen lese.
data = pandas.read_csv(filepath, header = 0, sep = DELIMITER,skiprows = 2)
Der Code schlägt entweder mit a fehl MemoryError
oder wird einfach nie beendet.
Die Mem-Nutzung im Task-Manager wurde bei 506 MB gestoppt, und nach 5 Minuten ohne Änderung und ohne CPU-Aktivität habe ich sie gestoppt.
Ich benutze Pandas Version 0.11.0.
Mir ist bekannt, dass es früher ein Speicherproblem mit dem Datei-Parser gab, aber laut http://wesmckinney.com/blog/?p=543 sollte dies behoben sein.
Die Datei, die ich zu lesen versuche, ist 366 MB groß. Der obige Code funktioniert, wenn ich die Datei auf etwas Kurzes (25 MB) reduziere.
Es ist auch passiert, dass ich ein Popup bekomme, das mir sagt, dass es nicht an die Adresse 0x1e0baf93 schreiben kann ...
Stacktrace:
Traceback (most recent call last):
File "F:\QA ALM\Python\new WIM data\new WIM data\new_WIM_data.py", line 25, in
<module>
wimdata = pandas.read_csv(filepath, header = 0, sep = DELIMITER,skiprows = 2
)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\io\parsers.py"
, line 401, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\io\parsers.py"
, line 216, in _read
return parser.read()
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\io\parsers.py"
, line 643, in read
df = DataFrame(col_dict, columns=columns, index=index)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\core\frame.py"
, line 394, in __init__
mgr = self._init_dict(data, index, columns, dtype=dtype)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\core\frame.py"
, line 525, in _init_dict
dtype=dtype)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\core\frame.py"
, line 5338, in _arrays_to_mgr
return create_block_manager_from_arrays(arrays, arr_names, axes)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\core\internals
.py", line 1820, in create_block_manager_from_arrays
blocks = form_blocks(arrays, names, axes)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\core\internals
.py", line 1872, in form_blocks
float_blocks = _multi_blockify(float_items, items)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\core\internals
.py", line 1930, in _multi_blockify
block_items, values = _stack_arrays(list(tup_block), ref_items, dtype)
File "C:\Program Files\Python\Anaconda\lib\site-packages\pandas\core\internals
.py", line 1962, in _stack_arrays
stacked = np.empty(shape, dtype=dtype)
MemoryError
Press any key to continue . . .
Ein bisschen Hintergrundwissen - Ich versuche, die Leute davon zu überzeugen, dass Python dasselbe wie R kann. Dazu versuche ich, ein R-Skript zu replizieren, das dies tut
data <- read.table(paste(INPUTDIR,config[i,]$TOEXTRACT,sep=""), HASHEADER, DELIMITER,skip=2,fill=TRUE)
R schafft es nicht nur, die obige Datei einwandfrei zu lesen, sondern liest sogar mehrere dieser Dateien in einer for-Schleife (und macht dann einige Dinge mit den Daten). Wenn Python ein Problem mit Dateien dieser Größe hat, könnte ich einen verlorenen Kampf führen ...