我是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
函数中做了什么不同,但它比任何这些压缩算法都快,压缩得更快。
您还需要指定一个“complib”。请参阅此处的文档:http://pandas-docs.github.io/pandas-docs-travis/io.html#compression – Jeff
复制并粘贴问题?您没有将'store'传递给'to_hdf'函数。因此,传递给HDFStore构造函数的任何参数都不起作用。最简单的方法是将complib和complevel参数传递给'to_hdf'并且根本不显式创建HDFStore对象。 –