2015-10-28 222 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