2016-09-03 27 views
5

इस में का उपयोग कर मेरी DataFrame की नज़र है:लेन() पांडा dataframe

 
    StateAb GivenNm Surname     PartyNm PartyAb ElectedOrder 
35  WA  Joe BULLOCK Australian Labor Party  ALP    2 
36  WA Michaelia  CASH     Liberal  LP    3 
37  WA  Linda REYNOLDS     Liberal  LP    4 
38  WA  Wayne DROPULICH Australian Sports Party SPRT    5 
39  WA  Scott  LUDLAM   The Greens (WA)  GRN    6 

और मैं सीनेटरों जिसका उपनाम 9 से अधिक वर्ण लंबा है की एक सूची की सूची बनाना चाहते।

तो मुझे लगता है कोड इस तरह होना चाहिए:

df[len(df.Surname) >9] 

लेकिन यह एक KeyError, जहां मैं गलती कर दी उठाती है?

+0

तुम भी 'df कर सकते हैं [df [ 'उपनाम']। लागू (लेन)> 9]' जिस तरह प्रत्येक स्ट्रिंग श्रृंखला और 'TRUE' देता है, तो में मौजूद का मूल्यांकन करता है के द्वारा स्थिति संतुष्ट है। –

उत्तर

11

एक कॉलम में तार की लंबाई के आधार एक DataFrame फिल्टर करने के लिए सही तरीका

df[df['Surname'].str.len() > 9] 

df['Surname'].str.len() उपनाम स्तंभ के लिए लंबाई की एक श्रृंखला बनाता है और df[df['Surname'].str.len() > 9] लोगों की तुलना में कम या 9 के बराबर बाहर फिल्टर है आपने सीरीज की लंबाई की जांच करने के लिए क्या किया है (इसमें कितनी पंक्तियां हैं)।

+1

लेकिन अगर मैं सीनेटर की एक सूची आउटपुट करना चाहता हूं जिसका निर्वाचित क्रम 6 है, तो मैं डीएफ [डीएफ.इलेटेडऑर्डर == 6], डीएफ का उपयोग कर सकता हूं। चयनित ऑर्डर भी एक श्रृंखला है, क्यों लेन() विशेष है? – Dong

+0

जब आप 'df ['electedOrder'] == 6' करते हैं, तो पांडा एक तत्वानुसार समानता तुलना को वापस करने के लिए' == 'ऑपरेटर को अधिभारित कर रहा है। लेन विशेष नहीं है। यह सिर्फ इतना है कि 'लेन' सीरीज़ पर ही सार्थक है (श्रृंखला की लंबाई/numpy सरणी)। लेकिन एक श्रृंखला 6 के बराबर नहीं हो सकती है। तो 'डीएफ [' उपनाम '] .__ लेन __() 'इस तरह से परिभाषित किया गया है। – ayhan

+0

'लेन (डीएफ)' वही परिणाम देता है जैसे 'लेन (डीएफ [' उपनाम '])' यानी पंक्तियों की संख्या। ऐसा इसलिए है क्योंकि 'डीएफ ['उपनाम']' 'श्रृंखला '(कॉलम ऑब्जेक्ट) है। आप कॉलम में स्ट्रिंग्स को 'लेन' लागू करना चाहते हैं ताकि आप '.str' – Lucidnonsense

0

पाइथन filter फ़ंक्शन पर एक नज़र डालें। यह वही करता है जो आप चाहते हैं।

df = [ 
    {"Surname": "Bullock-ish"}, 
    {"Surname": "Cash"}, 
    {"Surname": "Reynolds"}, 
] 
longnames = list(filter(lambda s: len(s["Surname"]) > 9, df)) 
print(longnames) 

>>[{'Surname': 'Bullock-ish'}] 

Sytse

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