2016-06-20 325 views
14

给出的是熊猫数据框的1.5 Gb列表。加载速度更快:python中的pickle或hdf5

我想知道哪个是更好的方法来处理加载这些数据: pickle(通过cPickle),hdf5,或其他在Python中?

首先,“倾销”数据可以花费很长时间,我只做一次。

我也是不是与磁盘上的文件大小有关。

问: 我所关心的是低速载货的数据到内存中尽可能快地。

+7

你有没有试过在你的特定条件下测量这个? – pvg

+1

我猜腌菜将是转储这些数据的最糟糕的方法之一:-)。当然,这只是一个猜测。我没有任何硬数据来支持它。说到硬数据,为什么不做一个实验并找出答案? – mgilson

+0

嗯,我发布的问题不是我想的答案;)我可以测试pickle vs hdf5,但是如果本网站的专家可以指导我采用更好的方法来解决“或其他问题”,该怎么办? :) – denvar

回答

29

我认为只有两种存储格式:HDF5(PyTables)和Feather

下面是对DF(形状的我read and write comparison结果:400万×6,大小内存183.1 MB,未压缩的CSV的大小 - 492 MB)。

比较以下存储格式:(CSVCSV.gzipPickleHDF5 [各种压缩):

    read_s write_s size_ratio_to_CSV 
storage 
CSV    17.900 69.00    1.000 
CSV.gzip   18.900 186.00    0.047 
Pickle    0.173  1.77    0.374 
HDF_fixed   0.196  2.03    0.435 
HDF_tab   0.230  2.60    0.437 
HDF_tab_zlib_c5 0.845  5.44    0.035 
HDF_tab_zlib_c9 0.860  5.95    0.035 
HDF_tab_bzip2_c5 2.500 36.50    0.011 
HDF_tab_bzip2_c9 2.500 36.50    0.011 

但它可能是你不一样,因为我的所有数据是datetime D型的,所以它总是更好地与你的真实数据或至少与类似的数据进行这样的比较...

+0

你为什么只考虑HDF5和Feather,而不是Pickle?你的结果显示它很好,还有压缩的泡菜。这不是一个好的标准选择吗? – THN

+0

@THN,如果我记得以前我看到过一些错误 - 我不确定它是否仍然如此... – MaxU

+1

Pickle有问题,它不适用于2-3GB的非常大的数据文件频繁。它的意思是小数据。还有泡菜有安全问题! – AbdealiJK