2014-02-17 98 views
3

我是pytables的新手,並且有關於存儲壓縮的熊貓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)大得多。

所以,我嘗試了由(刪除HDF5文件),並重新創建

# create HDF5 file 
store=pandas.io.pytables.HDFStore(H5name,complevel=1) 

,創造並沒有改變文件的大小壓縮。我嘗試了所有從1到9的complevels,尺寸仍然保持不變。

我嘗試添加

# create HDF5 file 
store=pandas.io.pytables.HDFStore(H5name,complevel=1,complib="zlib") 

,但它在壓縮沒有變化。

可能是什麼問題?

此外,理想情況下,我想使用類似於R爲其保存功能的壓縮方式(例如,在我的情況下,58kb文件在RData中保存爲27kb大小)?我是否需要在Python中進行任何額外的序列化以縮小尺寸?

編輯:

我使用Python 3.3.3和0.13.1熊貓

編輯: 我有一個更大的文件487MB csv文件,其RDATA size試圖(通過的r保存功能)是169MB。對於較大的文件,我確實看到了壓縮。 Bzip2給出了202MB(level = 9)的最佳壓縮率,並且是最慢的讀/寫。 Blosc壓縮(級別= 9)給出了最大276MB的大小,但寫入/讀取速度要快得多。

不確定R在save函數中做了什麼不同,但它比任何這些壓縮算法都快,壓縮得更快。

+0

您還需要指定一個「complib」。請參閱此處的文檔:http://pandas-docs.github.io/pandas-docs-travis/io.html#compression – Jeff

+0

複製並粘貼問題?您沒有將'store'傳遞給'to_hdf'函數。因此,傳遞給HDFStore構造函數的任何參數都不起作用。最簡單的方法是將complib和complevel參數傳遞給'to_hdf'並且根本不顯式創建HDFStore對象。 –

回答

2

這裏有一個非常小的文件。 HDF5基本上將您的數據分塊;通常64KB是最小塊大小。根據數據是什麼,它甚至可能不會以這種大小壓縮。

你可以嘗試msgpack這個大小的數據簡單的soln。 HDF5對於較大的尺寸非常有效,並且可以很好地壓縮。