दो प्राथमिक तरीके हैं जो पांडा डेटाफ़्रेम से चयन करते हैं।
- लेबल द्वारा
- इंटेगर लोकेशन द्वारा
दस्तावेज़ पूर्णांक स्थान का संदर्भ देने के लिए शब्द की स्थिति का उपयोग करता है । मुझे यह शब्दावली पसंद नहीं है क्योंकि मुझे लगता है कि यह भ्रामक है। पूर्णांक स्थान अधिक वर्णनात्मक है और वास्तव में यही है। यहाँ मुख्य शब्द INTEGER है - पूर्णांक स्थान का चयन करते समय आपको पूर्णांक का उपयोग करना चाहिए।.iloc
सारांश दिखाने से पहले हम सभी यह सुनिश्चित कर लें कि ...
.ix अनिच्छुक और अस्पष्ट है और इसका उपयोग कभी नहीं किया जाना चाहिए
पांडा के लिए तीन प्राथमिक सूचकांक हैं । हमारे पास स्वयं अनुक्रमणिका (कोष्ठक []
) है .loc
, और .iloc
। आइए उनका सारांश प्रस्तुत करते हैं:
[]
- मुख्य रूप से कॉलम के सबसेट का चयन करता है, लेकिन साथ ही पंक्तियों का चयन कर सकता है। एक साथ पंक्तियों और स्तंभों का चयन नहीं कर सकते।
.loc
- केवल लेबल द्वारा पंक्तियों और स्तंभों के सबसेट का चयन करता है
.iloc
- केवल पूर्णांक स्थान द्वारा पंक्तियों और स्तंभों के सबसेट का चयन करता है
मैं लगभग कभी भी उपयोग नहीं करता हूं .at
या .iat
जैसा कि वे कोई अतिरिक्त कार्यक्षमता नहीं जोड़ते हैं और बस एक छोटे से प्रदर्शन में वृद्धि होती है। जब तक आपके पास बहुत संवेदनशील एप्लिकेशन नहीं होगा, मैं उनके उपयोग को हतोत्साहित करूंगा। बावजूद, हमारे पास उनका सारांश है:
.at
केवल लेबल द्वारा DataFrame में एकल स्केलर मान का चयन करता है
.iat
केवल पूर्णांक स्थान द्वारा DataFrame में एकल स्केलर मान का चयन करता है
लेबल और पूर्णांक स्थान के चयन के अलावा , बूलियन चयन को बूलियन इंडेक्सिंग के रूप में भी जाना जाता है।
उदाहरण समझा .loc
, .iloc
, बूलियन चयन और .at
और .iat
नीचे दिखाए गए हैं
हम पहले .loc
और के बीच के अंतरों पर ध्यान केंद्रित करेंगे .iloc
। इससे पहले कि हम मतभेदों के बारे में बात करें, यह समझना महत्वपूर्ण है कि DataFrames में ऐसे लेबल हैं जो प्रत्येक स्तंभ और प्रत्येक पंक्ति को पहचानने में मदद करते हैं। आइए एक नजर डालते हैं सैंपल डाटाफ्रेम पर:
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 अनुक्रमणिका बूलियन चयन भी कर सकती है। उदाहरण के लिए, यदि हम उन सभी पंक्तियों को खोजने में रुचि रखते हैं, जहां उम्र 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'
द्वारा चयन .at
और.iat
के साथ चयन .at
लगभग समान है, .loc
लेकिन यह आपके डेटाफ़्रेम में केवल एक 'सेल' का चयन करता है। हम आमतौर पर इस सेल को स्केलर मान के रूप में संदर्भित करते हैं। उपयोग करने के लिए .at
, इसे एक पंक्ति और स्तंभ लेबल दोनों को एक अल्पविराम द्वारा अलग कर दें।
df.at['Christina', 'color']
'black'
के साथ चयन .iat
लगभग समान है, .iloc
लेकिन यह केवल एकल स्केलर मान का चयन करता है। आपको इसे पंक्ति और स्तंभ दोनों स्थानों के लिए पूर्णांक देना होगा
df.iat[2, 5]
'FL'