2014-12-08 47 views
0

我似乎無法能夠查詢最簡單的數據幀在HDFStore:查詢字詞無效[[條件:[無]]]

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]]] 

查詢不​​得到了同樣的錯誤。

令我驚訝的查詢MultiIndexed數據幀正常工作:

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

你需要設置你要查詢的data_columns列,看文檔

此外,查詢本身應該是一個字符串(不是列表):

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) 

您正在查詢索引,所以這麼說。不支持索引('A')的名稱 ATM。

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 
+0

這裏指定爲增強問題按名稱查詢添加索引:https://github.com/pydata/pandas/issues/9042 – Jeff 2014-12-08 11:22:51

+0

謝謝爲了答案,它的工作原理!讓我澄清其他任何人將查詢指定爲列表仍然是合法的語法。同樣在'MultiIndex'場景下,'index'查詢使用絕對行數而不是邏輯索引。在這種情況下,按名稱查詢'MultiIndex'('A')將起作用。 – roldugin 2014-12-08 23:32:19