我有一个不适合内存的大型数据集。我正在将它存储在HDFStore中,并且有两个表格:df_hist
是一个由MultiIndex
索引的直方图集合,其中第一个级别标记直方图,第二个级别标记直方图bin。 df_params
包含用于生成每个直方图的模拟参数,并且由直方图标签(即df_hist
索引的第一级)索引。从给定的索引列表中选择HDFStore中的行
In [1]: store = pandas.HDFStore('test.h5')
In [2]: store['df_params'].head()
Out[2]:
N z sample sigma oct T
0 64 6 6235 0.6 22 0.8200
1 64 6 6235 0.6 22 0.8476
2 64 6 6235 0.6 22 0.8757
3 64 6 6235 0.6 22 0.9043
4 64 6 6235 0.6 22 0.9336
In [3]: store['df_hist'].head()
Out[3]:
p p_err
id bin
0 0 0.000382 0.000008
1 0.002010 0.000025
2 0.005244 0.000038
3 0.009347 0.000052
4 0.012662 0.000058
我想这样做的是选择直方图的子集加载使用上df_params
表中的一些查询,然后只df_hist
加载相关行。如果数据能够装入内存我会做这样的事情:
df_params = store['df_params']
df_hist = store['df_hist']
selection = df_params.index[df_params['N']==64]
df = df_hist[df_hist.index.get_level_values('id').isin(selection)]
什么是实现这一目标的时候df_hist
过大,以适应在内存的最佳方法?理想的情况是有可能做这样的事情
store.select('df_hist', where='id isin selection')
你有什么试过?你看过[HDF5文档](http://pandas.pydata.org/pandas-docs/dev/io.html#querying-a-table)吗?从这里的例子:'store.select('dfq','index'Timestamp('20130104')&columns = ['A','B']“)'听起来很像你想要的。你可能不得不写一个包装来做选择,因为我不确定'isin'是否被支持。同样它需要在'表'格式,而不是'固定' – TomAugspurger