【问题标题】:Using compression with Pandas and HD5 / HDFStore对 Pandas 和 HD5 / HDFStore 使用压缩
【发布时间】:2013-08-18 22:59:30
【问题描述】:

对于项目的某些方面,使用“h5”存储将是理想的。但是,文件变得越来越大,坦率地说,我们的空间已经用完了。

此声明...

 store.put(storekey, data, table=False, compression='gzip')

在文件大小方面不会产生任何差异...

 store.put(storekey, data, table=False)

在通过 Pandas 时是否可以使用压缩?

...如果不可能,我不介意使用 h5py,但是,我不确定为“数据类型”放置什么,因为 DataFrame 包含各种类型(字符串、浮点数、整数等.)

任何帮助/见解将不胜感激!

【问题讨论】:

    标签: python pandas hdf5


    【解决方案1】:

    关于使用HDFStore的压缩,请参阅docs

    gzip 不是有效的压缩选项(并且被忽略,这是一个错误)。 尝试任何zlib, bzip2, lzo, blosc(bzip2/lzo 可能需要安装额外的库)

    查看PyTables docs的各种压缩

    这是一个question 半相关的。

    【讨论】:

    • 当我尝试通过文档(table=True/False...所有组合)实现代码时,出现以下错误:ValueError: Compression not supported on non-table Is my DataFrame(其中包含一些字符串) ,不兼容这种类型的存储?
    • 尝试用complib='zlib',complevel=9开店,第一次写;表支持按表压缩,但 storers(非表)不支持(因为它们的实现,它们在后台不使用压缩格式)
    • 顺便说一句,如果您确实有大量数据,table 格式可能更适合您,您可以使用append,例如进行分块读写(和查询); storer不能
    • 好的,我已经听从了建议并遇到了这个错误:TypeError: Cannot serialize the column [name] because its data contents are [unicode] object dtype
    • 你的python版本和tables版本是什么?
    【解决方案2】:

    过去我一直是 HDF5 的忠实粉丝,但遇到了各种复杂情况,尤其是 Pandas HDFStore,我开始认为 Exdir 是个好主意。

    http://exdir.readthedocs.io

    【讨论】:

      【解决方案3】:

      您可以像这样以压缩格式编写数据:

      import pandas as pd
      
      some_key = 'some_key'
      
      with pd.HDFStore('path/to/your/h5/file.h5', complevel=9, complib='zlib') as store:
          store[some_key] = your_data_to_save_in_the_key
      

      你可以把它读回来:

      with pd.HDFStore('path/to/your/h5/file.h5', complevel=9, complib='zlib') as store:
          data_retrieved = store[some_key]
      

      【讨论】:

        猜你喜欢
        • 2014-03-17
        • 1970-01-01
        • 2013-12-28
        • 2012-05-22
        • 2013-04-03
        • 2017-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多