मेरी राय में, स्वीकृत उत्तर भ्रामक है, क्योंकि यह केवल लापता मानों के साथ डेटाफ़्रेम का उपयोग करता है। मैं भी तरह अवधि नहीं है स्थिति के आधार पर के लिए .iloc
और बदले में, पसंद करते हैं स्थान पूर्णांक के रूप में यह बहुत अधिक वर्णनात्मक है और वास्तव में क्या .iloc
के लिए खड़ा है। मुख्य शब्द .iloc
INTEGER है - INTEGERS की आवश्यकता है।
अधिक के लिए सबसेट चयन पर मेरी अत्यंत विस्तृत ब्लॉग श्रृंखला देखें
.ix अनिच्छुक और अस्पष्ट है और इसका उपयोग कभी नहीं किया जाना चाहिए
क्योंकि .ix
पदावनत हम केवल .loc
और के बीच के अंतर पर ध्यान केंद्रित करेंगे .iloc
।
इससे पहले कि हम अंतरों के बारे में बात करें, यह समझना महत्वपूर्ण है कि डेटाफ्रैम में ऐसे लेबल हैं जो प्रत्येक कॉलम और प्रत्येक इंडेक्स को पहचानने में मदद करते हैं। आइए एक नजर डालते हैं सैंपल डाटाफ्रेम पर:
df = pd.DataFrame({'age':[30, 2, 12, 4, 32, 33, 69],
'color':['blue', 'green', 'red', 'white', 'gray', 'black', 'red'],
'food':['Steak', 'Lamb', 'Mango', 'Apple', 'Cheese', 'Melon', 'Beans'],
'height':[165, 70, 120, 80, 180, 172, 150],
'score':[4.6, 8.3, 9.0, 3.3, 1.8, 9.5, 2.2],
'state':['NY', 'TX', 'FL', 'AL', 'AK', 'TX', 'TX']
},
index=['Jane', 'Nick', 'Aaron', 'Penelope', 'Dean', 'Christina', 'Cornelia'])
बोल्ड के सभी शब्द लेबल हैं। लेबल, age
, color
, food
, height
, score
और state
के लिए उपयोग किया जाता है कॉलम । अन्य लेबल, Jane
, Nick
, Aaron
, Penelope
, Dean
, Christina
, Cornelia
के लिए उपयोग किया जाता है सूचकांक ।
एक DataFrame में विशेष पंक्तियों का चयन करने के लिए प्राथमिक तरीके के साथ कर रहे हैं .loc
और .iloc
indexers। इनमें से प्रत्येक अनुक्रमणिका का उपयोग एक साथ स्तंभों का चयन करने के लिए भी किया जा सकता है, लेकिन अभी के लिए पंक्तियों पर ध्यान केंद्रित करना आसान है। साथ ही, प्रत्येक अनुक्रमणिका ब्रैकेट के एक सेट का उपयोग करती है जो उनके चयन करने के लिए तुरंत उनके नाम का अनुसरण करते हैं।
.loc केवल लेबल द्वारा डेटा का चयन करता है
हम पहले .loc
इंडेक्सर के बारे में बात करेंगे जो केवल इंडेक्स या कॉलम लेबल द्वारा डेटा का चयन करता है। हमारे नमूने DataFrame में, हमने इंडेक्स के मूल्यों के रूप में सार्थक नाम प्रदान किए हैं। कई DataFrames का कोई सार्थक नाम नहीं होगा और इसके बजाय, केवल 0 से n-1 तक पूर्णांकों के लिए डिफ़ॉल्ट होगा, जहां n DataFrame की लंबाई है।
आपके लिए उपयोग किए जा सकने वाले तीन अलग-अलग इनपुट हैं .loc
- एक स्ट्रिंग
- तार की एक सूची
- स्टार्टिंग और स्टॉप वैल्यू के रूप में स्ट्रिंग्स का उपयोग करके स्लाइस नोटेशन
एक पंक्ति के साथ एक पंक्ति का चयन करना। एक स्ट्रिंग के साथ
डेटा की एक एकल पंक्ति का चयन करने के लिए, अनुक्रमणिका लेबल को कोष्ठक के अंदर रखें .loc
।
df.loc['Penelope']
यह एक श्रृंखला के रूप में डेटा की पंक्ति देता है
age 4
color white
food Apple
height 80
score 3.3
state AL
Name: Penelope, dtype: object
तार की सूची के साथ .loc के साथ कई पंक्तियों का चयन करना
df.loc[['Cornelia', 'Jane', 'Dean']]
यह सूची में निर्दिष्ट क्रम में पंक्तियों के साथ एक DataFrame लौटाता है:
स्लाइस अंकन के साथ .loc के साथ कई पंक्तियों का चयन करना
स्लाइस अंकन को एक शुरुआत, रोक और चरण मूल्यों द्वारा परिभाषित किया गया है। लेबल द्वारा स्लाइस करते समय, पांडा में रिटर्न में स्टॉप वैल्यू शामिल होती है। निम्नलिखित हारून से डीन के लिए स्लाइस, समावेशी। इसका चरण आकार स्पष्ट रूप से परिभाषित नहीं है लेकिन 1 के लिए डिफ़ॉल्ट है।
df.loc['Aaron':'Dean']
कॉम्प्लेक्स स्लाइस को उसी तरह से लिया जा सकता है जैसे पायथन सूची में।
.iloc केवल पूर्णांक स्थान द्वारा डेटा का चयन करता है
चलो अब बारी है .iloc
। DataFrame में डेटा की हर पंक्ति और कॉलम में एक पूर्णांक स्थान होता है जो इसे परिभाषित करता है। यह उस लेबल के अतिरिक्त है जो नेत्रहीन रूप से आउटपुट में प्रदर्शित होता है । पूर्णांक स्थान केवल 0 पर शीर्ष / बाईं ओर से पंक्तियों / स्तंभों की संख्या है।
आपके लिए उपयोग किए जा सकने वाले तीन अलग-अलग इनपुट हैं .iloc
- पूर्णांक
- पूर्णांकों की एक सूची
- प्रारंभ और रोक मूल्यों के रूप में पूर्णांकों का उपयोग करके स्लाइस अंकन
एक पूर्णांक के साथ .iloc के साथ एकल पंक्ति का चयन करना
df.iloc[4]
यह 5 वीं पंक्ति (पूर्णांक स्थान 4) को एक श्रृंखला के रूप में लौटाता है
age 32
color gray
food Cheese
height 180
score 1.8
state AK
Name: Dean, dtype: object
पूर्णांक की सूची के साथ .iloc के साथ कई पंक्तियों का चयन करना
df.iloc[[2, -2]]
यह तीसरी और दूसरी से अंतिम पंक्तियों का डेटाफ़्रेम लौटाता है:
कई पंक्तियों का चयन करें। टुकड़ा संकेतन के साथ .ococ
df.iloc[:5:3]
.Loc और .iloc के साथ पंक्तियों और स्तंभों का एक साथ चयन
दोनों की एक उत्कृष्ट क्षमता .loc/.iloc
दोनों पंक्तियों और स्तंभों को एक साथ चुनने की उनकी क्षमता है। उपरोक्त उदाहरणों में, प्रत्येक चयन से सभी कॉलम वापस कर दिए गए थे। हम उसी प्रकार के इनपुट के साथ कॉलम चुन सकते हैं जैसे हम पंक्तियों के लिए करते हैं। हमें केवल पंक्ति और स्तंभ चयन को अल्पविराम से अलग करने की आवश्यकता है ।
उदाहरण के लिए, हम पंक्तियों की ऊँचाई, स्कोर और राज्य के साथ जेन और डीन का चयन कर सकते हैं:
df.loc[['Jane', 'Dean'], 'height':]
यह पंक्तियों के लिए लेबल की एक सूची का उपयोग करता है और कॉलम के लिए टुकड़ा संकेतन
हम स्वाभाविक रूप से .iloc
केवल पूर्णांक का उपयोग करके इसी तरह के संचालन कर सकते हैं।
df.iloc[[1,4], 2]
Nick Lamb
Dean Cheese
Name: food, dtype: object
लेबल और पूर्णांक स्थान के साथ एक साथ चयन
.ix
लेबल और पूर्णांक स्थान के साथ एक साथ चयन करने के लिए उपयोग किया गया था जो कि उपयोगी था लेकिन कई बार भ्रमित और अस्पष्ट था और शुक्र है कि इसे हटा दिया गया है। इस घटना में कि आपको लेबल और पूर्णांक स्थानों के मिश्रण के साथ चयन करने की आवश्यकता है, आपको अपने चयन लेबल या पूर्णांक दोनों स्थान बनाने होंगे।
उदाहरण के लिए, यदि हम पंक्तियों का चयन करना चाहते हैं Nick
और Cornelia
कॉलम 2 और 4 के साथ, हम .loc
पूर्णांकों को निम्नलिखित के साथ लेबल में परिवर्तित करके उपयोग कर सकते हैं :
col_names = df.columns[[2, 4]]
df.loc[['Nick', 'Cornelia'], col_names]
या वैकल्पिक रूप से, इंडेक्स लेबल्स को get_loc
इंडेक्स विधि के साथ पूर्णांक में परिवर्तित करें ।
labels = ['Nick', 'Cornelia']
index_ints = [df.index.get_loc(label) for label in labels]
df.iloc[index_ints, [2, 4]]
बूलियन चयन
.Loc अनुक्रमणिका बूलियन चयन भी कर सकती है। उदाहरण के लिए, अगर हम सभी पंक्तियों ढूँढने में दिलचस्पी रहे हैं wher उम्र 30 से ऊपर है और वापसी सिर्फ food
और score
स्तंभों हम निम्न कर सकते हैं:
df.loc[df['age'] > 30, ['food', 'score']]
आप इसे दोहरा सकते हैं, .iloc
लेकिन आप इसे बूलियन श्रृंखला नहीं दे सकते। आपको बूलियन सीरीज़ को इस तरह एक शानदार सरणी में बदलना होगा:
df.iloc[(df['age'] > 30).values, [2, 4]]
सभी पंक्तियों का चयन
.loc/.iloc
केवल कॉलम चयन के लिए उपयोग करना संभव है । आप इस तरह एक कोलन का उपयोग करके सभी पंक्तियों का चयन कर सकते हैं:
df.loc[:, 'color':'score':2]
अनुक्रमणिका ऑपरेटर, []
पंक्तियों और स्तंभों का भी चयन कर सकता है, लेकिन एक साथ नहीं।
ज्यादातर लोग डेटाफ्रैम इंडेक्सिंग ऑपरेटर के प्राथमिक उद्देश्य से परिचित हैं, जो कॉलम का चयन करना है। एक स्ट्रिंग श्रृंखला के रूप में एक एकल कॉलम का चयन करता है और स्ट्रिंग्स की एक सूची एक DataFrame के रूप में कई कॉलम का चयन करती है।
df['food']
Jane Steak
Nick Lamb
Aaron Mango
Penelope Apple
Dean Cheese
Christina Melon
Cornelia Beans
Name: food, dtype: object
एक सूची का उपयोग कई कॉलम का चयन करता है
df[['food', 'score']]
लोग किस चीज से कम परिचित हैं, वह यह है कि, जब स्लाइस नोटेशन का उपयोग किया जाता है, तो चयन पंक्ति लेबल या पूर्णांक स्थान द्वारा होता है। यह बहुत भ्रामक है और ऐसा कुछ है जिसका मैं लगभग कभी उपयोग नहीं करता लेकिन यह काम करता है।
df['Penelope':'Christina'] # slice rows by label
df[2:6:2] # slice rows by integer location
.loc/.iloc
पंक्तियों के चयन के लिए गवाह को अत्यधिक पसंद किया जाता है। अनुक्रमणिका ऑपरेटर अकेले पंक्तियों और स्तंभों का एक साथ चयन करने में असमर्थ है।
df[3:5, 'color']
TypeError: unhashable type: 'slice'