परिचय
Pandas में इंडेक्स पोजीशन या इंडेक्स लेबल का उपयोग करके डेटा के सबसेट को चुनने की दोहरी क्षमता होती है। इस पोस्ट में, मैं आपको दिखाऊंगा कि "इंडेक्स लेबल का उपयोग करके डेटा का सबसेट कैसे चुनें"।
याद रखें, Python डिक्शनरी और लिस्ट बिल्ट-इन डेटा स्ट्रक्चर हैं जो अपने डेटा को या तो इंडेक्स लेबल या इंडेक्स पोजीशन का उपयोग करके चुनते हैं। एक डिक्शनरी की कुंजी स्ट्रिंग, इंटीजर या टपल होनी चाहिए जबकि एक लिस्ट को चयन के लिए या तो इंटीजर (पोजीशन) या स्लाइस ऑब्जेक्ट का उपयोग करना होगा।
Pandas में .loc और .iloc एट्रिब्यूट उपलब्ध हैं जो अपने अनूठे तरीकों से इंडेक्स ऑपरेशन करते हैं। .iloc एट्रिब्यूट के साथ, Pandas केवल पोजीशन द्वारा चयन करता है और Python लिस्ट के समान काम करता है। .loc एट्रिब्यूट केवल इंडेक्स लेबल द्वारा चयन करता है, जो Python डिक्शनरी के काम करने के समान है।
.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
मैंने sort_index और inplace=True पैरामीटर का उपयोग करके इंडेक्स को सॉर्ट किया है।
1. loc मेथड के सिंटैक्स के बारे में एक दिलचस्प बात यह है कि यह पैरेंथिसिस () नहीं लेता बल्कि स्क्वायर ब्रैकेट [] लेता है। मुझे लगता है (शायद गलत) ऐसा इसलिए है क्योंकि वे स्थिरता चाहते थे यानी आप एक Series पर पंक्तियों को निकालने के लिए [] का उपयोग कर सकते हैं, जबकि DataFrame पर लागू करने पर यह कॉलम लाएगा।
# "Spider-Man 3" निकालें (मैं स्पाइडी का बड़ा प्रशंसक नहीं हूँ)
movies.loc["Spider-Man 3"]
budget 258000000.0
vote_average 5.9
vote_count 3576.0
Name: Spider-Man 3, dtype: float64
1. कई मान निकालने के लिए स्लाइस का उपयोग करें। मैं उन फिल्मों को निकालने जा रहा हूं जो मैंने नहीं देखी हैं। चूंकि यह एक स्ट्रिंग लेबल है, इसलिए हमें अपने खोज मानदंड के लिए सभी डेटा मिलेगा जिसमें "Avatar" शामिल है।
याद रखें - यदि आप Python लिस्ट के साथ काम करते हैं तो अंतिम मान बाहर रखा जाता है लेकिन चूंकि हम स्ट्रिंग्स के साथ काम कर रहे हैं यह समावेशी है।
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 rows × 3 columns
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. क्या मैं चयन का क्रम बदल सकता हूँ? बिल्कुल, आप अपनी जरूरत के लेबल की सूची को एक क्रम में निर्दिष्ट करके खुद की मदद कर सकते हैं।
हालांकि यह उन लेबल की सूची निर्दिष्ट करने के लिए अच्छा लगता है जिन्हें आप निकालना चाहते हैं, क्या आप जानते हैं कि यदि आपने किसी मान को गलत लिखा तो क्या होगा? Pandas गलत लिखे गए लेबल के लिए मिसिंग वैल्यू (NaN) डाल देगा। लेकिन वे दिन गए, नवीनतम अपडेट के साथ यह एक अपवाद उठाता है।
movies.loc[["Avengers: Age of Ultron", "Avatar", "When is Avengers next movie?"]]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
...
KeyError: 'Passing list-likes to .loc or [] with any missing labels is no longer supported, see https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#deprecate-loc-reindex-listlike'
इसका ख्याल रखने का एक तरीका इंडेक्स में सीधे मानों की जांच करना है।
"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