2013-11-28 11 views
5

का उपयोग करके एचडीएफ स्टोर से पूछताछ कैसे करें I विश्लेषण करने में राम की मात्रा का प्रबंधन करने के लिए, मेरे पास hdf5 (.h5) में संग्रहीत एक बड़ा डेटासेट है और मुझे पांडों का उपयोग करके कुशलता से इस डेटासेट से पूछताछ करने की आवश्यकता है।पांडस/पायथन

डेटा सेट में ऐप्स के सूट के लिए उपयोगकर्ता प्रदर्शन डेटा शामिल है। मैं केवल 40 में से कुछ फ़ील्ड खींचना चाहता हूं, और फिर परिणामी डेटाफ्रेम को केवल उन उपयोगकर्ताओं को फ़िल्टर करना चाहता हूं जो मुझे रुचि रखने वाले कुछ ऐप्स में से एक का उपयोग कर रहे हैं।

# list of apps I want to analyze 
apps = ['a','d','f'] 

# Users.h5 contains only one field_table called 'df' 
store = pd.HDFStore('Users.h5') 

# the following query works fine 
df = store.select('df',columns=['account','metric1','metric2'],where=['Month==10','IsMessager==1']) 

# the following pseudo-query fails 
df = store.select('df',columns=['account','metric1','metric2'],where=['Month==10','IsMessager==1', 'app in apps']) 

मुझे एहसास है कि स्ट्रिंग 'ऐप में ऐप' वह नहीं है जो मैं चाहता हूं। यह केवल एक एसक्यूएल-जैसा प्रतिनिधित्व है जिसे मैं प्राप्त करने की आशा करता हूं। मैं कोशिश करता हूं कि तारों की एक सूची किसी भी तरह से मैं कोशिश करता हूं, लेकिन एक रास्ता होना चाहिए।

के लिए अब मैं बस इस पैरामीटर के बिना क्वेरी चला रहा हूँ और फिर मैं बाद में एक कदम thusly

df = df[df['app'].isin(apps)] 

में क्षुधा मैं नहीं करना चाहती को फ़िल्टर लेकिन यह सभी ऐप्स के बाद से बहुत कम कुशल है इससे पहले कि मैं उन्हें हटा सकूं, पहले स्मृति में लोड होने की आवश्यकता है। कुछ मामलों में, यह बड़ी समस्या है क्योंकि मेरे पास पूरे unfiltered डीएफ का समर्थन करने के लिए पर्याप्त स्मृति नहीं है।

मैं सहायता की सराहना करता हूं। यह मेरा पहला स्टैक ओवरफ्लो प्रश्न है, इसलिए किसी भी सलाह का भी स्वागत है।

उत्तर

13

आप बहुत करीब हैं।

In [1]: df = DataFrame({'A' : ['foo','foo','bar','bar','baz'], 
         'B' : [1,2,1,2,1], 
         'C' : np.random.randn(5) }) 

In [2]: df 
Out[2]: 
    A B   C 
0 foo 1 -0.909708 
1 foo 2 1.321838 
2 bar 1 0.368994 
3 bar 2 -0.058657 
4 baz 1 -1.159151 

[5 rows x 3 columns] 

एक तालिका के रूप दुकान (ध्यान दें कि 0.12 में आप बल्कि format='table' से table=True का उपयोग करेगा,) लिखें। data_columns है कि आप जब तालिका बनाने क्वेरी करना चाहते हैं निर्दिष्ट करने के लिए याद रखें (या आप data_columns=True कर सकते हैं) मास्टर/0.13 में सिंटेक्स

In [3]: df.to_hdf('test.h5','df',mode='w',format='table',data_columns=['A','B']) 

In [4]: pd.read_hdf('test.h5','df') 
Out[4]: 
    A B   C 
0 foo 1 -0.909708 
1 foo 2 1.321838 
2 bar 1 0.368994 
3 bar 2 -0.058657 
4 baz 1 -1.159151 

[5 rows x 3 columns] 

, ISIN query_column=list_of_values के माध्यम से पूरा किया है। यह कहां स्ट्रिंग के रूप में प्रस्तुत किया जाता है।

In [8]: pd.read_hdf('test.h5','df',where='A=["foo","bar"] & B=1') 
Out[8]: 
    A B   C 
0 foo 1 -0.909708 
2 bar 1 0.368994 

[2 rows x 3 columns] 

0.12 में सिंटेक्स, यह एक सूची (जो शर्तों और शर्तों) होना चाहिए।

In [11]: pd.read_hdf('test.h5','df',where=[pd.Term('A','=',["foo","bar"]),'B=1']) 
Out[11]: 
    A B   C 
0 foo 1 -0.909708 
2 bar 1 0.368994 

[2 rows x 3 columns] 
+0

धन्यवाद @ जेफ। यह बहुत अच्छा काम किया –