使用HDFStore压缩数据

时间:2014-02-17 19:57:09

标签: python r pandas hdf5 pytables

我是pytables的新手并且有关于存储压缩的pandas DataFrame的问题。我目前的代码是:

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)远远大于我用来创建pandas DataFrame的原始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和Pandas 0.13.1

修改 我尝试使用更大的文件487MB csv文件,其RData size(通过R的保存功能)为169MB。对于较大的文件,我确实看到了压缩。 Bzip2的最佳压缩率为202MB(级别= 9),读取/写入速度最慢。 Blosc压缩(级别= 9)的最大大小为276MB,但写入/读取速度要快得多。

不确定R在save函数中的作用是否有所不同,但它比任何这些压缩算法都快,压缩得多。

1 个答案:

答案 0 :(得分:2)

这里有一个非常小的文件。 HDF5基本上是你的数据块;通常64KB是最小块大小。不管数据是什么,它甚至可能不会压缩到那么大的数量。

您可以尝试使用msgpack获取此尺寸数据的简单soln。 HDF5对于较大的尺寸非常有效,并且可以很好地压缩。