2017-04-25 14 views
9

मैं पाइथन पांडस डेटाफ्रेम की पंक्तियों पर फिर से प्रयास करने की कोशिश कर रहा हूं। डेटाफ्रेम की प्रत्येक पंक्ति के भीतर, मैं अपने कॉलम नाम से पंक्ति के साथ प्रत्येक मान को संदर्भित करने का प्रयास कर रहा हूं। प्रत्येक चरण में एक पंक्ति चयन करने के बाद , मैं कैसे पंक्ति तत्वों द्वारा उपयोग करते हैं -पाइथन पांडो पंक्तियों पर पहुंचते हैं और कॉलम नामों का उपयोग करते हैं

import numpy as np 
import pandas as pd 

df = pd.DataFrame(np.random.rand(10,4),columns=list('ABCD')) 
print df 
      A   B   C   D 
0 0.351741 0.186022 0.238705 0.081457 
1 0.950817 0.665594 0.671151 0.730102 
2 0.727996 0.442725 0.658816 0.003515 
3 0.155604 0.567044 0.943466 0.666576 
4 0.056922 0.751562 0.135624 0.597252 
5 0.577770 0.995546 0.984923 0.123392 
6 0.121061 0.490894 0.134702 0.358296 
7 0.895856 0.617628 0.722529 0.794110 
8 0.611006 0.328815 0.395859 0.507364 
9 0.616169 0.527488 0.186614 0.278792 

मैं this approach इस्तेमाल किया पुनरावृत्ति करने के लिए, लेकिन यह केवल मुझे समाधान का हिस्सा दे रहा है:

यहाँ मैं क्या है उनके कॉलम का नाम?

यहाँ मैं क्या करने की कोशिश कर रहा हूँ है:

for row in df.iterrows(): 
    print row.loc[0,'A'] 
    print row.A 
    print row.index() 

मेरे समझ उस पंक्ति एक पांडा series है। लेकिन मेरे पास श्रृंखला में अनुक्रमित करने का कोई तरीका नहीं है।

क्या पंक्तियों पर एक साथ फिर से कॉलम नामों का उपयोग करना संभव है?

+1

'पंक्ति' आपके उदाहरण में एक श्रृंखला नहीं है, यह एक ट्यूपल होना चाहिए। लेकिन अगर आप idx के लिए करते हैं, df.iterrows() 'में पंक्ति,' पंक्ति ['ए'] 'ठीक काम करना चाहिए? – ayhan

+0

यही वह था जो मैं याद कर रहा था! धन्यवाद। –

उत्तर

12

iterrows() से आइटम ताकि आप तो जैसे पाश के लिए में टपल खोल सकता है, एक श्रृंखला, लेकिन (सूचकांक, सीरीज) के एक टपल नहीं है:

for (idx, row) in df.iterrows(): 
    print(row.loc['A']) 
    print(row.A) 
    print(row.index) 

#0.890618586836 
#0.890618586836 
#Index(['A', 'B', 'C', 'D'], dtype='object') 
+0

@StevenG हाँ। यही कहना है कि मैं कहना चाहता था। मुझे लगता है कि अगर हम कहते हैं तो यह स्पष्ट है (सूचकांक, श्रृंखला)। – Psidom

+0

दूसरे उत्तर में सुझाए गए itertuples() का उपयोग करें ... यदि आप एक बड़े डेटाफ्रेम इंटरटुपल्स के साथ काम कर रहे हैं तो बहुत तेज़ – Megha

7

मैं भी itertuples()

चाहते
for row in df.itertuples(): 
    print(row.A) 
    print(row.Index) 

के बाद से लगातार एक नामित tuples है, यदि आप प्रत्येक पंक्ति पर पहुँच मूल्यों का मतलब यह ज्यादा तेजी से होना चाहिए

स्पीड रन:

df = pd.DataFrame([x for x in range(1000*1000)], columns=['A']) 
st=time.time() 
for index, row in df.iterrows(): 
    row.A 
print(time.time()-st) 
45.05799984931946 

st=time.time() 
for row in df.itertuples(): 
    row.A 
print(time.time() - st) 
0.48400020599365234 
+0

धन्यवाद! मुझे लगता है कि यह वास्तव में मेरे मन में था (लेकिन याद नहीं कर सका)। यह अधिक व्यावहारिक है (चूंकि 'idx' की कोई आवश्यकता नहीं है, जैसे कि सूची को' गणना करना ')। चूंकि मैंने 'iterrows()' के लिए कहा था, इसलिए मैं उस उत्तर के साथ जाऊंगा। लेकिन यही वह था जो मैंने याद किया था। –

+0

इसकी तरह 100x तेज है .. –

+0

@StevenG, प्रदर्शन तुलना के लिए धन्यवाद। – vlmercado

संबंधित मुद्दे