2014-12-08 72 views
1

如何通過使用Pandas比較hdf5文件中的兩列來選擇某些行? hdf5文件太大而無法加載到內存中。例如,我想選擇列A和列B相等的行。數據框保存在文件'mydata.hdf5'中。謝謝。通過使用HDFStore比較列來選擇行

import pandas as pd 
store = pd.HDFstore('mydata.hdf5') 
df = store.select('mydf',where='A=B') 

這是行不通的。我知道store.select('mydf',where ='A == 12')會起作用。但是,我想比較列A和B的示例數據如下:

A B C 
1 1 3 
1 2 4 
. . . 
2 2 5 
1 3 3 
+0

這是一個錯字:'df = store.select('mydf',where ='A = B')'?不應該是:'df = store.select('mydf',where ='A == B')'即2'=='s? – EdChum 2014-12-08 09:17:33

+0

@EdChum,感謝您的快速回復。但'A = B'和'A == B'都可以。錯誤如下: c:\ python33 \ lib \ site-packages \ pandas \ computing \ pytables.py in convert_value(self,v) 184返回TermValue(int(v),v,kind) 185 elif kind == u('integer'): - > 186 v = int(float(v)) 187 return TermValue(v,v,kind) 188 elif kind == u('float'): ValueError:無法將字符串轉換爲float:'chr_b' – Lee 2014-12-08 09:27:35

回答

1

你不能直接這樣做,但是下面的工作

In [23]: df = DataFrame({'A' : [1,2,3], 'B' : [2,2,2]}) 

In [24]: store = pd.HDFStore('test.h5',mode='w') 

In [26]: store.append('df',df,data_columns=True) 

In [27]: store.select('df') 
Out[27]: 
    A B 
0 1 2 
1 2 2 
2 3 2 

In [28]: store.select_column('df','A') == store.select_column('df','B') 
Out[28]: 
0 False 
1  True 
2 False 
dtype: bool 

這應該是相當有效的。

+0

這適用於簡單情況。但是如果我們有更多的專欄來比較,如何解決呢? data = store.select('df',store.select_column('df','A')== store.select_column('df','B')&store.select_column('df','C')< store.select_column('df','D')&store.select_column('df','E')== 2)。這可能不緊湊和高效,因爲我們多次調用.select_column,對吧? – Lee 2014-12-08 12:27:44

+0

我認爲列之間的比較是相當習慣使用。但我找不到任何相關文件。熊貓還沒有實現這個功能,對吧? – Lee 2014-12-08 12:32:22

+0

只需將它讀入內存,然後直接執行。這不由PyTables實現。所以沒有簡單的方法來做到這一點。 – Jeff 2014-12-08 13:00:18