परिचय
इंडेक्स स्थिति का उपयोग करके या इंडेक्स लेबल का उपयोग करके डेटा के सबसेट का चयन करने के लिए पांडा के पास दोहरी चयन क्षमता है। इस पोस्ट में, मैं आपको दिखाऊंगा कि इंडेक्स लेबल का उपयोग करके "इंडेक्स लेबल का उपयोग करके डेटा का एक सबसेट कैसे चुनें"।
याद रखें, पायथन डिक्शनरी और सूचियाँ अंतर्निहित डेटा संरचनाएँ हैं जो इंडेक्स लेबल या बायइंडेक्स स्थिति का उपयोग करके अपने डेटा का चयन करती हैं। शब्दकोश की कुंजी एक स्ट्रिंग, पूर्णांक या टपल होनी चाहिए, जबकि सूची में चयन के लिए या तो पूर्णांक (स्थिति) या स्लाइसऑब्जेक्ट का उपयोग करना चाहिए।
पंडों के पास .loc और.iloc विशेषताएँ उपलब्ध हैं जो अपने स्वयं के अनूठे तरीकों से अनुक्रमणिका संचालन करने के लिए उपलब्ध हैं। ) with.iloc विशेषता, पांडा केवल स्थिति के आधार पर चयन करते हैं और पायथन सूचियों के समान काम करते हैं। .loc विशेषता केवल इंडेक्स लेबल द्वारा चुनती है, जो कि पायथन डिक्शनरी के काम करने के तरीके के समान है।
.loc[] के साथ अनुक्रमणिका लेबल का उपयोग करके डेटा का एक सबसेट चुनें []
loc और iloc विशेषताएँ Series और DataFrame दोनों पर उपलब्ध हैं
1. इंडेक्स के रूप में शीर्षक के साथ मूवी डेटासेट आयात करें।
import pandas as pd movies = pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv", index_col="title", usecols=["title","budget","vote_average","vote_count"])
मैं हमेशा इंडेक्स को सॉर्ट करने की सलाह देता हूं, खासकर अगर इंडेक्स स्ट्रिंग्स से बना हो। यदि आप अपनी अनुक्रमणिका को क्रमबद्ध करते समय एक विशाल डेटासेट के साथ काम कर रहे हैं तो आपको अंतर दिखाई देगा।
movies.sort_index(inplace = True) movies.head(3)
budget vote_average vote_count title ___________________________________ #Horror 1500000 3.3 52 (500) Days of Summer 7500000 7.2 2904 10 Cloverfield Lane 15000000 6.8 2468
मैंने सॉर्ट_इंडेक्स और "इनप्लेस =ट्रू" पैरामीटर का उपयोग करके इंडेक्स को सॉर्ट किया है।
1. लोक पद्धति के वाक्य-विन्यास के बारे में एक दिलचस्प बात यह है कि यह कोष्ठक नहीं लेता है () बल्कि वर्गाकार लेता है []। मुझे लगता है (गलत हो सकता है) ऐसा इसलिए है क्योंकि वे निरंतरता चाहते थे यानी आप [] का उपयोग श्रृंखला पर निकालने के लिए कर सकते हैं, जबकि डेटाफ्रेम पर लागू होने पर आपको कॉलम मिलेंगे।
# extract "Spider-Man 3" ( I'm not a big fan of spidy) movies.loc["Spider-Man 3"]
budget 258000000.0 vote_average 5.9 vote_count 3576.0 Name: Spider-Man 3, dtype: float64
1. कई मान निकालने के लिए एक स्लाइस का उपयोग करें। मैं उन फिल्मों को खींचने जा रहा हूं जो मैंने नहीं देखी हैं। चूंकि यह एक स्ट्रिंग लेबल है, इसलिए हमें "अवतार" सहित हमारे खोज मानदंड के लिए सभी डेटा प्राप्त होने जा रहे हैं।
याद रखें - यदि आप Python List के साथ काम करते हैं तो अंतिम मान को बाहर रखा गया है, लेकिन चूंकि हम स्ट्रिंग्स के साथ काम कर रहे हैं, यह समावेशी है।
movies.loc["Alien":"Avatar"]
budget vote_average vote_count title Alien 11000000 7.9 4470 Alien Zone 0 4.0 3 Alien: Resurrection 70000000 5.9 1365 Aliens 18500000 7.7 3220 Aliens in the Attic 45000000 5.3 244 ... ... ... ... Australia 130000000 6.3 694 Auto Focus 7000000 6.1 56 Automata 7000000 5.6 670 Autumn in New York 65000000 5.7 135 Avatar 237000000 7.2 11800
167 पंक्तियाँ × 3 स्तंभ
1. क्या मुझे दो या दो से अधिक यादृच्छिक फिल्में मिल सकती हैं जो एक दूसरे के बगल में नहीं हैं? निश्चित रूप से हाँ, लेकिन आपको अपनी ज़रूरत की फ़िल्मों की सूची को पास करने के लिए और अधिक प्रयास करने की आवश्यकता है।
मेरा मतलब यह था कि आपके पास वर्गाकार कोष्ठकों के साथ वर्गाकार कोष्ठक होने चाहिए।
movies.loc[["Avatar","Avengers: Age of Ultron"]]
budget vote_average vote_count title Avatar 237000000 7.2 11800 Avengers: Age of Ultron 280000000 7.3 6767
6. क्या मैं चयन के क्रम को बदल सकता हूँ? बेशक, आप एक क्रम में आवश्यक लेबलों की सूची निर्दिष्ट करके स्वयं की सहायता कर सकते हैं।
हालांकि यह उन लेबलों की सूची निर्दिष्ट करने के लिए अच्छा लगता है जिन्हें आप निकालना चाहते हैं, क्या आप जानते हैं कि यदि आपने किसी मान की गलत वर्तनी की है तो क्या होगा? पंडों ने गलत वर्तनी वाले लेबल के लिए लापता मान (NaN) को अटका दिया होगा। लेकिन वे दिन गए, नवीनतम अपडेट के साथ यह एक अपवाद खड़ा करता है।
movies.loc[["Avengers: Age of Ultron","Avatar","When is Avengers next movie?"]]
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-6-ebe975264840> in <module> ----> 1 movies.loc[["Avengers: Age of Ultron","Avatar","When is Avengers next movie?"]] ~\anaconda3\lib\site-packages\pandas\core\indexing.py in __getitem__ (self, key) 1766 1767 maybe_callable = com.apply_if_callable( key,self.obj) -> 1768 return self._getitem_axis(maybe_callable,axis = axis) 1769 1770 def_is_scalar_access(self,key:Tuple): ~\anaconda3\lib\site-packages\pandas\core\indexing.py in _getitem_axis (self, key, axis) 1952 raiseValueError("Cannot index with multidimensional key") 1953 -> 1954 return self._getitem_iterable(key, axis=axis) 1955 1956 # nested tuple slicing ~\anaconda3\lib\site-packages\pandas\core\indexing.py in_getitem_iterable(self, key, axis) 1593 else: 1594 # A collection of keys -> 1595 keyarr,indexer=self._get_listlike_indexer(key,axis,raise_missing=False) 1596 return self.obj._reindex_with_indexers( 1597 {axis:[keyarr,indexer]},copy=True,allow_dups=True ~\anaconda3\lib\site-packages\pandas\core\indexing.py in _get_listlike_indexer(self, key, axis, raise_missing) 1550 keyarr,indexer,new_indexer=ax._reindex_non_unique (keyarr) 1551 -> 1552 self._validate_read_indexer( 1553 keyarr,indexer,o._get_axis_number (axis),raise_missing=raise_missing 1554 ) ~\anaconda3\lib\site-packages\pandas\core\indexing.py in _validate_read_indexer (self, key, indexer, axis, raise_missing) 1652 # just raising 1653 ifnot(ax.is_categorical()orax.is_interval() ) : -> 1654 raise KeyError( 1655 "Passing list-likes to .loc or [] with any missing labels " 1656 "is no longer supported, see "
KeyError:'किसी भी लापता लेबल के साथ .loc या [] को सूची-पसंद पास करना अब समर्थित नहीं है, देखें https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex -सूची की तरह'
देखभाल करने का एक तरीका सीधे इंडेक्स में मानों की जांच करना है।
"When is Avengers next movie?"in movies.index
आउटपुट
False
यदि आप त्रुटि को अनदेखा करना चाहते हैं और आगे बढ़ना चाहते हैं तो आप नीचे दिए गए दृष्टिकोण का उपयोग कर सकते हैं
movies.query("title in ('Avatar','When is Avengers next Movie?')")
budget vote_average vote_count title Avatar 237000000 7.2 11800