如何查询通过 Pandas Dataframe 保存的 PyTables frame_table?

How to query a PyTables frame_table saved via a Pandas Dataframe?

我有以下 pandas 数据框:

import pandas as pd
df = pd.read_table('fname.dat')

所以,我创建/打开一个现有的 HDFStore 文件:

store = pd.HDFStore('store.h5')

要索引列的子集,我只需使用

store.append('key_name', df, data_columns=['colA','colB','colZ'])

显然,HDFStore.append()默认以 table 格式保存 pandas 个数据帧。然而,看起来它实际上是一个 'frame_table' 对象:

store 

输出

 /key_name            frame_table  (typ->appendable,nrows->3254334,ncols->14,indexers->[index],dc->[colA, colB, colZ])

如何有效地索引这个对象?

通常,查询是

 result = [row for row in table.where('colA==22 & colB==45')]

但是有人会为 frame_table 对象这样做吗?

frame_table - 表示它是以 table 格式保存的数据帧。

当使用 data_columns=['colA','colB','colZ'] 参数时,您已经有 "indexed" ['colA','colB','colZ'] 列。

现在您可以按如下方式查询您的 HDFStore:

store = pd.HDFStore('store.h5')
varA = 100
varZ = 'string_value'
df = store.select('key_name', where='colA >= varA & colZ == varZ')

或者您可以使用 pd.read_hdf(...) 而不是 store.select(...)

PS 如果您提供样本和所需的数据集,答案可能会更简洁...