我是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
函数中的作用是否有所不同,但它比任何这些压缩算法都快,压缩得多。
答案 0 :(得分:2)
这里有一个非常小的文件。 HDF5基本上是你的数据块;通常64KB是最小块大小。不管数据是什么,它甚至可能不会压缩到那么大的数量。
您可以尝试使用msgpack
获取此尺寸数据的简单soln。 HDF5对于较大的尺寸非常有效,并且可以很好地压缩。