Próbuję zrobić coś dość prostego, wczytując duży plik csv do ramki danych pandy.
data = pandas.read_csv(filepath, header = 0, sep = DELIMITER,skiprows = 2)
Kod albo kończy się niepowodzeniem MemoryError
, albo po prostu nigdy się nie kończy.
Użycie pamięci w menedżerze zadań zatrzymało się na 506 Mb i po 5 minutach braku zmian i braku aktywności procesora w procesie zatrzymałem je.
Używam pand w wersji 0.11.0.
Wiem, że kiedyś występował problem z pamięcią w parserze plików, ale według http://wesmckinney.com/blog/?p=543 powinno to zostać naprawione.
Plik, który próbuję odczytać ma 366 Mb, powyższy kod działa, jeśli skrócę plik do czegoś krótkiego (25 Mb).
Zdarzyło się również, że wyskoczyło mi wyskakujące okienko z informacją, że nie może napisać na adres 0x1e0baf93 ...
Ślad stosu:
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 . . .
Trochę tła - próbuję przekonać ludzi, że Python może zrobić to samo co R. W tym celu próbuję powielić skrypt R, który to robi
data <- read.table(paste(INPUTDIR,config[i,]$TOEXTRACT,sep=""), HASHEADER, DELIMITER,skip=2,fill=TRUE)
R nie tylko udaje się dobrze odczytać powyższy plik, ale nawet czyta kilka z tych plików w pętli for (a następnie robi coś z danymi). Jeśli Python ma problem z plikami o takim rozmiarze, być może toczę przegraną bitwę ...