2015-10-29 13 views
10

नीचे की तरह एक df तालिका के बाद स्तंभ का चयन करने के लिए की जरूरत हैपांडा: क्यों डबल कोष्ठक, बूलियन अनुक्रमण

A B C D 
0 0 1 1 1 
1 2 3 5 7 
3 3 1 2 8 

क्यों डबल कोष्ठक बूलियन अनुक्रमण के बाद विशिष्ट स्तंभ के चयन के लिए आवश्यक हैं?

the [['A','C']] part of 

df[df['A'] < 3][['A','C']] 

उत्तर

26

पांडा ऑब्जेक्ट्स (सीरीज, डेटाफ्रेम) के लिए, इंडेक्सिंग ऑपरेटर [] केवल

    0 स्वीकार करता है
  1. colname या स्तंभों (ओं)
  2. स्लाइसिंग या बूलियन सरणी को पंक्तियों का चयन करने के लिए चुनने के लिए उपनामों की सूची, यानी यह केवल डेटाफ्रेम के एक आयाम को संदर्भित करता है।

df[[colname(s)]] के लिए, आंतरिक कोष्ठक सूची के लिए कर रहे हैं, और बाहर कोष्ठक ऑपरेटर का अनुक्रमण कर रहे हैं, यदि आप दो या अधिक स्तंभों का चयन यानी आप डबल कोष्ठक उपयोग करना चाहिए। एक कॉलम नाम के साथ, ब्रैकेट की एक जोड़ी एक श्रृंखला लौटाती है, जबकि डबल ब्रैकेट डेटाफ्रेम लौटाते हैं।

इसके अलावा, df.ix[df['A'] < 3,['A','C']] या df.loc[df['A'] < 3,['A','C']] डेटाफ्रेम के दृश्य बनाम एक प्रतिलिपि लौटने से बचने के लिए जंजीर चयन से बेहतर है।

विवरण

+1

धन्यवाद। मैं इसे चुनने जा रहा हूं क्योंकि यह बाहरी ब्रैकेट के उद्देश्य से कुछ विवरण में जाता है, जो मुझे भ्रमित कर रहा था। जैसा कि आपने दोनों का उल्लेख किया है, मैं .ix का उपयोग करना शुरू कर दूंगा जो मुझे समझ में आता है/बेहतर बनाता है। – FortuneFaded

5

क्योंकि आप 'A','C' नाम का कोई कॉलम है, जो आप जो एक KeyError बढ़ा देंगे करने का प्रयास कर होगी क्या है, तो आप df से उप-चयन करने के लिए एक iterable उपयोग करना होगा।

तो

df[df['A'] < 3]['A','C'] 

को जन्म देती है

KeyError: ('A', 'C')

कौन सा

In [261]: 
df[df['A'] < 3][['A','C']] 

Out[261]: 
    A C 
0 0 1 
1 2 5 

से अलग है यह कोशिश कर रहा करने के लिए अलग नहीं है:

df['A','C'] 

इसलिए क्यों आप की जरूरत डबल वर्ग कोष्ठक:

df[['A','C']] 

ध्यान दें कि आधुनिक तरीके से उपयोग करने के लिए है .ix:

In [264]: 
df.ix[df['A'] < 3,['A','C']] 

Out[264]: 
    A C 
0 0 1 
1 2 5 

तो भी आप संभवतः एक प्रति के बजाय एक दृश्य पर काम कर रहे हैं

+0

धन्यवाद के लिए pandas documentation देखें। इसे .ix रूप में डालने पर यह अधिक समझ में आता है। मुझे डबल ब्रैकेट के मतलब से फेंक दिया गया था। – FortuneFaded

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