Pandas和HDF5中的文件大小减少

时间:2015-10-28 13:05:26

标签: python numpy pandas hdf5 pytables

我正在运行一个模型,将数据输出到多个Pandas帧中,然后将这些帧保存到HDF5文件中。该模型运行数百次,每次将新列(多索引)添加到现有HDF5文件的帧中。这是通过Pandas merge完成的。由于每次运行的帧长度不同,因此帧中最多会有NaN个值。

完成足够的模型运行后,如果行或列与出现错误的模型运行相关联,则会从帧中删除数据。在该过程中,新数据帧被放入新的HDF5文件中。以下伪python显示了这个过程:

with pandas.HDFStore(filename) as store:
    # figure out which indices should be removed
    indices_to_drop = get_bad_indices(store)

    new_store = pandas.HDFStore(reduced_filename) 
    for key in store.keys():
        df = store[key]
        for idx in indices_to_drop:
             df = df.drop(idx, <level and axis info>)
        new_store[key] = df
    new_store.close()

新的hdf5文件最终大小为原始文件大小的10%。文件中唯一的区别是所有NaN值不再相等(但都是numpy float64值)。

我的问题是,如何在现有的hdf5文件上实现文件大小减少(可能通过管理NaN值)?有些时候我不需要做上述程序,但无论如何我都是这样做的。是否有可以执行此操作的现有Pandas或PyTables命令?非常感谢你提前。

1 个答案:

答案 0 :(得分:5)

查看文档here

警告说明了一切:

  

警告请注意HDF5在h5文件中没有重新开始   自动。因此,反复删除(或删除节点)和   再添加将趋于增加文件大小。要清理文件,   使用ptrepack