如何读/写HDF5商店中的子组?

时间:2014-08-05 02:58:39

标签: python pandas hdf5 pytables

我正在使用HDF5Store,在分析之前存储我的一些处理结果。 进入商店我想提出3种类型的结果,

  • 原始结果,完全没有处理过,只是从原始CSV格式读入并合并
  • 从原始结果派生的处理结果,有一些处理和划分为更多逻辑分组
  • 添加了有用的夏季列并删除了冗余列的汇总结果,以便于阅读。

我认为使用Hierarchical Keys的HDF5Store会做到这一点,一个用于Raw,一个用于Processed,一个用于Summarized。

我想要一个像:

这样的结构
<class 'pandas.io.pytables.HDFStore'>
File path: results.h5
/proccessed/dbn_reinit                           frame        (shape->[22880,19])
/proccessed/dbn_rerep_code                       frame        (shape->[11440,18])
/proccessed/dbn_rerep_enhanced_input             frame        (shape->[11440,18])
/proccessed/linear_classifier                    frame        (shape->[572,18])  
/proccessed/msda_rerep_code                      frame        (shape->[18304,17])
/proccessed/msda_rerep_enhanced_input            frame        (shape->[18304,17])
/raw/dbn_reinit                                  frame        (shape->[22880,15])
/raw/dbn_rerep                                   frame        (shape->[23452,15])
/raw/msda_rerep                                  frame        (shape->[36608,14])
/summerised/dbn_reinit                           frame        (shape->[22880,10])
/summerised/dbn_rerep_code                       frame        (shape->[11440,9]) 
/summerised/dbn_rerep_enhanced_input             frame        (shape->[11440,9]) 
/summerised/linear_classifier                    frame        (shape->[572,6])   
/summerised/msda_rerep_code                      frame        (shape->[18304,10])
/summerised/msda_rerep_enhanced_input            frame        (shape->[18304,10])

我希望我能说:

store = pandas.HDF5Store('results.h5')
store.add_group('raw')
raw_store = store['raw'] 
raw_store['dbn_reinit'] = dbn_reinit_dataframe
raw_store['dbn_rerep_code'] = dbn_rerep_code_dataframe
...

然而,似乎并不是一种获取商店子组并使用它的方法,因为它是商店,

所以我不得不这样做:

store = pd.HDFStore('results.h5', mode='w')

store['raw/dbn_reinit'] = dbn_reinit_dataframe
store['raw/dbn_rerep'] = dbn_reinit_dataframe
...

这是罗嗦的,并没有真正显示任何类型的结果分组到3个类别 我错过了什么吗? 或者是HDF的Hieratrchical特征, 只写一些包含/ s的长键名吗?

1 个答案:

答案 0 :(得分:1)

使用分层键的文档是here.remove()具有此类功能,您可以在该级别删除树中的节点。

您可以执行:store.get_storer('foo')返回包含对节点的访问权限的对象。 (例如.group)。但是,此对象不允许您添加/选择子节点,也不提供该节点的良好repr。

您可以在github上为这些功能添加功能请求。请提供您认为应该做的可重复的示例。

欢迎提出请求!

我很少使用多个组。主要是因为使用不同文件的灵活性。你可以做你想做的事情,我从来没有找到它的需要(例如把你的团体视为文件本身)。 HDF5不是数据库,所以这很少有用