Я новичок в pytables и задал вопрос о хранении сжатых pandas DataFrame. Мой текущий код:Сжатие данных с HDFStore
import pandas
# HDF5 file name
H5name="C:\\MyDir\\MyHDF.h5"
# create HDF5 file
store=pandas.io.pytables.HDFStore(H5name)
# write a pandas DataFrame to the HDF5 file created
myDF.to_hdf(H5name,"myDFname",append=True)
# read the pandas DataFrame back from the HDF5 file created
myDF1=pandas.io.pytables.read_hdf(H5name,"myDFname")
# close the file
store.close()
Когда я проверил размер hdf5 создан, размер (212kb) был гораздо больше, чем оригинальный файл CSV (58Kb) я использовал для создания панд DataFrame.
Итак, я попробовал сжатие путем (удаление файла hdf5) и воссоздавать
# create HDF5 file
store=pandas.io.pytables.HDFStore(H5name,complevel=1)
и размер созданного файла не изменится. Я пробовал все complevels
от 1 до 9, и размер остался прежним.
Я пытался добавить
# create HDF5 file
store=pandas.io.pytables.HDFStore(H5name,complevel=1,complib="zlib")
, но у него не было никаких изменений в сжатии.
В чем может быть проблема?
Кроме того, в идеале я хотел бы использовать сжатие, подобное тому, что делает R для его функции сохранения (например, в моем случае файл 58kb был сохранен в размере 27 КБ в RData)? Нужно ли делать какую-либо дополнительную сериализацию в Python, чтобы уменьшить размер?
EDIT:
Я использую Python 3.3.3 и панда 0.13.1
EDIT: Я попытался с большим файла 487MB CSV-файлом, чей RDATA size
(через R Сохранит функция) - 169 МБ. Для больших файлов я вижу сжатие. Bzip2 дал лучшее сжатие 202 МБ (уровень = 9) и был самым медленным для чтения/записи. Сжатие Blosc (уровень = 9) дало наибольший размер 276 МБ, но было намного быстрее писать/читать.
Не уверен, что R делает по-другому в своей функции save
, но он одинаково быстрый и гораздо более сжатый, чем любой из этих компрессионных альго.
вам также нужно указать '' complib''. см. документы здесь: http://pandas-docs.github.io/pandas-docs-travis/io.html#compression – Jeff
Скопировать и вставить проблему? Вы не передаете 'store' функции' to_hdf'. Поэтому любые параметры, переданные конструктору HDFStore, не имеют эффекта. Проще всего передать параметры complib и completevel в 'to_hdf' и не создавать объект HDFStore явно. –