2014-02-17 72 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对于较大的尺寸非常有效,并且可以很好地压缩。