查询字词无效[[条件:[无]]]

时间:2014-12-08 08:45:55

标签: python pandas pytables

我似乎无法查询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

1 个答案:

答案 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