परिचय
Pandas में इंडेक्स पोजीशन या इंडेक्स लेबल का उपयोग करके डेटा के सबसेट को चुनने की दोहरी क्षमता होती है। इस पोस्ट में, मैं आपको दिखाऊंगा कि "लेक्सिकोग्राफिकल स्लाइसिंग का उपयोग करके डेटा का सबसेट कैसे चुनें"।
Google डेटासेट से भरा पड़ा है। Kaggle.com पर मूवीज डेटासेट खोजें। इस पोस्ट में Kaggle से मूवीज डेटासेट का उपयोग किया गया है।
कैसे करें
1. केवल इस उदाहरण के लिए आवश्यक कॉलम के साथ मूवीज डेटासेट आयात करें।
import pandas as pd
import numpy as np
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.sample(n=5)
| title | budget | vote_average | vote_count |
|---|---|---|---|
| Little Voice | 0 | 6.6 | 61 |
| Grown Ups 2 | 80000000 | 5.8 | 1155 |
| The Best Years of Our Lives | 2100000 | 7.6 | 143 |
| Tusk | 2800000 | 5.1 | 366 |
| Operation Chromite | 0 | 5.8 | 29 |
2. मैं हमेशा इंडेक्स को सॉर्ट करने की सलाह देता हूं, खासकर यदि इंडेक्स स्ट्रिंग्स से बना हो। आप अंतर देखेंगे यदि आप एक विशाल डेटासेट के साथ काम कर रहे हैं जब आपका इंडेक्स सॉर्ट किया गया हो।
यदि मैं इंडेक्स सॉर्ट न करूं तो क्या होगा?
कोई समस्या नहीं, आपका कोड हमेशा के लिए चलेगा। मजाक कर रहा हूं, खैर यदि इंडेक्स लेबल अनसॉर्टेड हैं तो Pandas को आपके क्वेरी से मिलान करने के लिए सभी लेबल को एक-एक करके पार करना होगा। बस ऑक्सफोर्ड डिक्शनरी की कल्पना करें बिना इंडेक्स पेज के, आप क्या करेंगे? सॉर्ट किए गए इंडेक्स के साथ आप जल्दी से उस लेबल पर जा सकते हैं जिसे आप निकालना चाहते हैं, Pandas के साथ भी ऐसा ही है।
आइए पहले जांचें कि हमारा इंडेक्स सॉर्टेड है या नहीं।
# जांचें कि इंडेक्स सॉर्टेड है या नहीं?
movies.index.is_monotonic
# Output: False
3. स्पष्ट रूप से, इंडेक्स अनसॉर्टेड है। हम 'A' से शुरू होने वाली फिल्मों को चुनने का प्रयास करेंगे। यह लिखने जैसा है:
select * from movies where title like 'A%'
movies.loc["Aa":"Bb"]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
...
ValueError: index must be monotonic increasing or decreasing
...
KeyError: 'Aa'
4. इंडेक्स को आरोही क्रम में सॉर्ट करें और लेक्सिकोग्राफिकल स्लाइसिंग के लिए सॉर्टिंग का लाभ लेने के लिए उसी कमांड को फिर से आज़माएं।
movies.sort_index(inplace=True)
movies.index.is_monotonic
# Output: True
5. अब हमारा डेटा सेट हो गया है और लेक्सिकोग्राफिकल स्लाइसिंग के लिए तैयार है। आइए अब अक्षर A से लेकर अक्षर B तक शुरू होने वाले सभी मूवी टाइटल चुनें।
movies.loc["Aa":"Bb"]
| title | budget | vote_average | vote_count |
|---|---|---|---|
| Abandon | 25000000 | 4.6 | 45 |
| Abandoned | 0 | 5.8 | 27 |
| Abduction | 35000000 | 5.6 | 961 |
| Aberdeen | 0 | 7.0 | 6 |
| About Last Night | 12500000 | 6.0 | 210 |
| ... | ... | ... | ... |
| Battle for the Planet of the Apes | 1700000 | 5.5 | 215 |
| Battle of the Year | 20000000 | 5.9 | 88 |
| Battle: Los Angeles | 70000000 | 5.5 | 1448 |
| Battlefield Earth | 44000000 | 3.0 | 255 |
| Battleship | 209000000 | 5.5 | 2114 |
292 rows × 3 columns
यदि हम रिवर्स ऑर्डर में स्लाइस करने का प्रयास करते हैं:
movies.loc["Bb":"Aa"]
यह एक खाली DataFrame लौटाएगा क्योंकि डेटा आरोही क्रम में सॉर्टेड है। आइए अक्षरों को उल्टा करें और फिर से चलाएं।
movies.loc["Bb":"Aa"]
| title | budget | vote_average | vote_count |
|---|---|---|---|
| B-Girl | 0 | 5.5 | 7 |
| Ayurveda: Art of Being | 300000 | 5.5 | 3 |
| Away We Go | 17000000 | 6.7 | 189 |
| Awake | 86000000 | 6.3 | 395 |
| Avengers: Age of Ultron | 280000000 | 7.3 | 6767 |
| ... | ... | ... | ... |
| About Last Night | 12500000 | 6.0 | 210 |
| Aberdeen | 0 | 7.0 | 6 |
| Abduction | 35000000 | 5.6 | 961 |
| Abandoned | 0 | 5.8 | 27 |
| Abandon | 25000000 | 4.6 | 45 |
228 rows × 3 columns