我似乎无法查询HDFStore中最简单的DataFrame:
In [1]:
import pandas as pd
pd.__version__
Out[1]:
'0.15.1'
In [2]:
df = pd.DataFrame.from_dict({'A':[1,2],'B':[100,200], 'C':[42,11]})
df_a = df.set_index('A')
df_a
Out[2]:
B C
A
1 100 42
2 200 11
In [3]:
store = pd.HDFStore('foo.h5','w')
store.put('bar', df_a, format='table')
store.select('bar', where=["'A' == 1"])
---------------------------------------------------------------------------
ValueError: query term is not valid [[Condition : [None]]]
在没有set_index
的情况下查询会产生相同的错误。
令我惊讶的是,查询MultiIndexed DataFrame工作正常:
In [4]:
df_ab = df.set_index(['A','B'])
df_ab
Out [4]:
C
A B
1 100 42
2 200 11
In [5]:
store.put('bar', df_ab, format='table')
store.select('bar', where=["'A' == 1"])
Out [5]:
C
A B
1 100 42
答案 0 :(得分:1)
您需要将要查询的列设置为data_columns,请参阅docs
此外,查询本身应该是一个字符串(不是列表):
In [1]: df = pd.DataFrame.from_dict({'A':[1,2],'B':[100,200], 'C':[42,11]})
In [2]: df_a = df.set_index('A')
In [3]: df_a
Out[3]:
B C
A
1 100 42
2 200 11
In [4]: store = pd.HDFStore('foo.h5','w')
In [5]: store.put('bar', df_a, format='table', data_columns=True)
你正在查询索引,所以说。 ATM不支持索引('A')的名称。
In [7]: store.select('bar','index==1')
Out[7]:
B C
A
1 100 42
data_columns可以在查询中指定
In [8]: store.select('bar','B==100')
Out[8]:
B C
A
1 100 42