2015-10-28 119 views
1

我运行的模型将数据输出到多个熊猫帧,然后将这些帧保存到HDF5文件。该模型运行数百次,每次将新列(多索引)添加到现有的HDF5文件的框架中。这是通过Pandas merge完成的。由于每次运行时帧的长度都不相同,因此帧中会有大量值为NaN熊猫和HDF5文件大小减少

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

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值)?有些时候我不需要做上述程序,但是我正在做这件事来减少这种情况。有没有现有的熊猫或PyTables命令可以做到这一点?非常感谢你提前。

回答

4

请参阅该文档here

警告说,这一切:

警告请注意,HDF5不会在H5文件 回收空间自动。因此,反复删除(或删除节点)并再次添加会增加文件大小。清理文件, 使用ptrepack

+0

谢谢,这样做! – James