Я намагаюся зробити щось досить просте, читаючи великий файл CSV у фреймі даних pandas.
data = pandas.read_csv(filepath, header = 0, sep = DELIMITER,skiprows = 2)
Код або не працює MemoryError
, або просто ніколи не закінчується.
Використання пам’яті в диспетчері завдань зупинилося на рівні 506 Мб, і через 5 хвилин без змін і без активності процесора я зупинив це.
Я використовую pandas версії 0.11.0.
Мені відомо, що раніше виникала проблема пам’яті з парсером файлів, але згідно з http://wesmckinney.com/blog/?p=543 це мало бути виправлено.
Файл, який я намагаюся прочитати, становить 366 Мб. Код, наведений вище, працює, якщо я скорочую файл на щось коротке (25 Мб).
Також траплялося, що я отримую спливаюче вікно із повідомленням, що він не може писати на адресу 0x1e0baf93 ...
Tracktrace:
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 . . .
Трохи передісторії - я намагаюся переконати людей, що Python може робити те саме, що і R. Для цього я намагаюся відтворити скрипт R, який робить
data <- read.table(paste(INPUTDIR,config[i,]$TOEXTRACT,sep=""), HASHEADER, DELIMITER,skip=2,fill=TRUE)
R не тільки чудово читає вищезазначений файл, він навіть зчитує декілька з цих файлів у циклі for (а потім робить деякі речі з даними). Якщо у Python виникають проблеми з файлами такого розміру, можливо, я б'ю битву ...