【问题标题】:How do I read/write to a subgroup withing a HDF5Store?如何读取/写入 HDF5 存储中的子组?
【发布时间】:2014-09-27 15:00:14
【问题描述】:

我正在使用 HDF5Store 来存储我的一些处理结果,然后再进行分析。 进店里我要放3种结果,

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

我认为具有分层键的 HDF5Store 可以做到这一点,一个用于 Raw,一个用于 Processed,一个用于 Summarised。

我想要这样的结构:

<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 的层次特征, 只是写很长的键名,其中包含/s?

【问题讨论】:

    标签: python pandas hdf5 pytables


    【解决方案1】:

    有关使用分层键的文档是 here.remove() 具有这种类型的功能,您可以在其中删除该级别的节点并在树的更下方。

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

    您可以在 github 上针对这些功能提出功能请求。请提供一个您认为应该这样做的可重现示例。

    欢迎拉取请求!

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

    【讨论】:

      猜你喜欢
      • 2023-03-08
      • 2022-07-07
      • 2013-05-14
      • 2017-09-23
      • 2014-01-22
      • 2020-06-15
      • 2017-10-18
      • 2021-03-27
      • 1970-01-01
      相关资源
      最近更新 更多