读取HDF5文件中的整个组Pandas.HDF

2024-09-27 07:32:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的HDF文件:

>>> dataset.store
... <class 'pandas.io.pytables.HDFStore'>
... File path: ../data/data_experiments_01-02-03.h5
... /exp01/user01    frame_table  (typ->appendable,nrows->221,ncols->124,indexers->[index])
... /exp01/user02    frame_table  (typ->appendable,nrows->163,ncols->124,indexers->[index])
... /exp01/user03    frame_table  (typ->appendable,nrows->145,ncols->124,indexers->[index])
... /exp02/user01    frame_table  (typ->appendable,nrows->194,ncols->124,indexers->[index])
... /exp02/user02    frame_table  (typ->appendable,nrows->145,ncols->124,indexers->[index])
... /exp03/user03    frame_table  (typ->appendable,nrows->348,ncols->124,indexers->[index])
... /exp03/user01    frame_table  (typ->appendable,nrows->240,ncols->124,indexers->[index])

我想从中检索一个实验(exp0Z)中的所有用户(userXY),并将它们附加到单个大数据帧中。我尝试store.get('exp03')获取以下错误:

^{pr2}$

我可以通过调用store.get('exp03/user01')来检索单个用户,所以我想可以迭代store.keys()并手动附加检索到的数据帧,但我想知道是否可以在一次调用store.get()或其他类似方法中这样做。在

EDIT:注意dataset是一个包含熊猫.hdf商店在


Tags: storedatagetindextableframedatasetuser01
1条回答
网友
1楼 · 发布于 2024-09-27 07:32:40

虽然这可能是一个很好的特性,但没有实现。(而且,我不会在.get(...)中默认设置它,因为它不够明确(例如,它应该总是读取所有表,猜测太多),但是可以有一个参数来控制我假设的子表。如果你有兴趣实现这个,请把github。在

不过,您可以使用一些内部函数来简化这一过程(甚至可以向每个select传递一个where)。在

In [13]: store = pd.HDFStore('test.h5',mode='w')

In [14]: store.append('df/foo1',DataFrame(np.random.randn(10,2)))

In [15]: store.append('df/foo2',DataFrame(np.random.randn(10,2)))

In [16]: pd.concat([ store.select(node._v_pathname) for node in store.get_node('df') ])
Out[16]: 
          0         1
0 -0.495847 -1.449251
1 -0.494721  1.572560
2  1.219985  0.280878
3 -0.419651  1.975562
4 -0.489689 -2.712342
5 -0.022466 -0.238129
6 -1.195269 -0.028390
7 -0.192648  1.220730
8  1.331892  0.950508
9 -0.790354 -0.743006
0 -0.761820  0.847983
1 -0.126829  1.304889
2  0.667949 -1.481652
3  0.030162 -0.111911
4 -0.433762 -0.596412
5 -1.110968  0.411241
6 -0.428930  0.086527
7 -0.866701 -1.286884
8 -0.649420  0.227999
9 -0.100669 -0.205232

[20 rows x 2 columns]

In [17]: store.close()

但是请记住,如果我这样做,那么当数据相同时,它们没有理由有单独的节点;如果在一个表中有一个字段(比如一个字段)来指示它的名称或id或其他任何东西,那么它们的效率要高得多。在

我几乎总是为异构数据使用不同的节点(不需要不同的数据类型,但需要不同的数据类型)。在

也就是说,你可以随心所欲地组织!在

相关问题 更多 >

    热门问题