2013-09-25 2 views
10

एक पांडा डेटाफ्रेम में पंक्ति का उपयोग करने के लिए एक आदेशित आदेश में पंक्ति प्राप्त करने के लिए एक तेज़ तरीका ढूंढना। सूची ठीक है लेकिन बड़े डेटा सेट के साथ लंबे समय तक लगेंगे। मैं फियोना जीआईएस रीडर का उपयोग कर रहा हूं और पंक्तियों को डेटा प्रकार देने वाली स्कीमा के साथ आदेश दिया गया है। मैं डेटा में शामिल होने के लिए पांडा का उपयोग करता हूं। मैं कई मामलों में पंक्तियों के अलग-अलग प्रकार होंगे, इसलिए मैं सोच रहा था कि टाइप स्ट्रिंग के साथ एक numpy सरणी में बदलना चाल हो सकता है।पांडैस डेटाफ्रेम पंक्ति को ऑर्डरडिक्ट में तेजी से कैसे चालू करें

उत्तर

16

दुर्भाग्य से आप सिर्फ एक लागू (क्योंकि यह यह एक DataFrame वापस करने के लिए फिट बैठता है) नहीं कर सकते:

In [1]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b']) 

In [2]: df 
Out[2]: 
    a b 
0 1 2 
1 3 4 

In [3]: from collections import OrderedDict 

In [4]: df.apply(OrderedDict) 
Out[4]: 
    a b 
0 1 2 
1 3 4 

लेकिन आप iterrows के साथ एक सूची समझ का उपयोग कर सकते हैं:

In [5]: [OrderedDict(row) for i, row in df.iterrows()] 
Out[5]: [OrderedDict([('a', 1), ('b', 2)]), OrderedDict([('a', 3), ('b', 4)])] 

यह तो किसी सूची के बजाय जनरेटर का उपयोग करना संभव था, जो भी आप इसके साथ काम कर रहे थे, आमतौर पर अधिक कुशल होंगे:

In [6]: (OrderedDict(row) for i, row in df.iterrows()) 
Out[6]: <generator object <genexpr> at 0x10466da50> 
4

यह पैरामीटर into साथ समारोह to_dict में pandas 0.21.0+ में कार्यान्वित किया जाता:

df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b']) 
print (df) 
    a b 
0 1 2 
1 3 4 

d = df.to_dict(into=OrderedDict, orient='index') 
print (d) 
OrderedDict([(0, OrderedDict([('a', 1), ('b', 2)])), (1, OrderedDict([('a', 3), ('b', 4)]))]) 
संबंधित मुद्दे