DataFrames पर बूलियन इंडेक्सिंग
किसी स्तंभ पर बूलियन शर्त लागू करके पंक्तियाँ फ़िल्टर कीजिए और & तथा | ऑपरेटरों से अनेक शर्तों को मिलाइए।
DataFrames पर बूलियन इंडेक्सिंग, CoddyKit पर Pandas & NumPy Academy का एक निःशुल्क पाठ है। यह 4 में से 1वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Pandas & NumPy Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
बूलियन इंडेक्सिंग क्या है
बूलियन इंडेक्सिंग ऐसी शर्त लागू करके DataFrame की पंक्तियों को फ़िल्टर करने देती है, जिससे True और False मानों वाली Series बनती है। केवल वे पंक्तियाँ लौटाई जाती हैं जिनमें शर्त True होती है। यह Pandas में सबसे अधिक उपयोग की जाने वाली चयन तकनीकों में से एक है, क्योंकि यह पढ़ने में आसान और तेज़ दोनों है।
उदाहरण के लिए, किसी बिक्री DataFrame में आप लूप लिखे बिना उन सभी पंक्तियों को तुरंत प्राप्त कर सकते हैं जिनमें राजस्व 1000 से अधिक था।
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'revenue': [500, 1500, 800, 2000]
})
# Boolean condition produces a Series of True/False
mask = df['revenue'] > 1000
print(mask)
# 0 False
# 1 True
# 2 False
# 3 Trueबूलियन मास्क लागू करना
बूलियन मास्क तैयार होने के बाद, केवल मेल खाने वाली पंक्तियाँ चुनने के लिए उसे DataFrame के वर्गाकार कोष्ठकों के भीतर दें। परिणाम एक नया DataFrame होता है — मूल DataFrame में कभी कोई बदलाव नहीं किया जाता। मूल DataFrame के पंक्ति इंडेक्स सुरक्षित रहते हैं, इसलिए आपको हमेशा पता रहता है कि प्रत्येक पंक्ति कहाँ से आई है।
यह तरीका — मास्क बनाएँ, फिर लागू करें — पंक्तियों को फ़िल्टर करने की मानक Pandas शैली है।
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'revenue': [500, 1500, 800, 2000]
})
mask = df['revenue'] > 1000
filtered = df[mask]
print(filtered)
# product revenue
# 1 B 1500
# 3 D 2000मास्क चर के बिना सीधे शर्तें लगाना
आपको बूलियन Series को किसी चर में असाइन करने की आवश्यकता नहीं है। आप शर्त को सीधे वर्गाकार कोष्ठकों के भीतर inline लिख सकते हैं: df[df['col'] > value]। डेटा विश्लेषण की नोटबुक में यह एक-पंक्ति शैली बहुत सामान्य है, क्योंकि इससे कोड संक्षिप्त और पढ़ने योग्य रहता है।
दोनों तरीके — मास्क चर और inline — एक जैसे परिणाम देते हैं। शर्त जटिल हो या दोबारा उपयोग करनी हो तो चर का उपयोग करें; सरल, एक बार के फ़िल्टर के लिए inline का उपयोग करें।
import pandas as pd
df = pd.DataFrame({
'city': ['NYC', 'LA', 'Chicago', 'Houston'],
'population': [8_336_817, 3_979_576, 2_693_976, 2_320_268]
})
# Inline boolean filter
large_cities = df[df['population'] > 3_000_000]
print(large_cities)
# city population
# 0 NYC 8336817
# 1 LA 3979576& (AND) से शर्तें मिलाना
यह आवश्यक करने के लिए कि दोनों शर्तें सत्य हों, उन्हें & ऑपरेटर से मिलाएँ — Python के and कीवर्ड से नहीं, क्योंकि यह ऐरे पर तत्व-दर-तत्व काम नहीं करता। प्रत्येक शर्त को कोष्ठकों में रखना आवश्यक है, क्योंकि & की ऑपरेटर प्राथमिकता तुलना ऑपरेटरों से अधिक होती है।
परिणाम में केवल वे पंक्तियाँ रहती हैं जिनमें हर उप-शर्त का मूल्यांकन True होता है।
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Carol', 'Dave'],
'age': [25, 35, 28, 45],
'salary': [50000, 90000, 70000, 120000]
})
# Both conditions must be true
result = df[(df['age'] > 27) & (df['salary'] > 60000)]
print(result)
# name age salary
# 1 Bob 35 90000
# 2 Carol 28 70000| (OR) से शर्तें मिलाना
उन पंक्तियों को रखने के लिए | ऑपरेटर का उपयोग करें जिनमें कम-से-कम एक शर्त सत्य हो। & की तरह, प्रत्येक उप-शर्त को कोष्ठकों में रखना आवश्यक है। | ऑपरेटर बूलियन ऐरे पर तत्व-दर-तत्व तार्किक OR लागू करता है।
& और | को मिलाना पूरी तरह मान्य है — सही मूल्यांकन क्रम सुनिश्चित करने और सूक्ष्म तर्कगत त्रुटियों से बचने के लिए बस कोष्ठकों का ध्यान रखें।
import pandas as pd
df = pd.DataFrame({
'product': ['Laptop', 'Mouse', 'Monitor', 'Keyboard'],
'price': [1200, 25, 300, 80],
'category': ['Electronics', 'Accessories', 'Electronics', 'Accessories']
})
# Rows where price > 200 OR category is Accessories
result = df[(df['price'] > 200) | (df['category'] == 'Accessories')]
print(result)
# product price category
# 0 Laptop 1200 Electronics
# 1 Mouse 25 Accessories
# 2 Monitor 300 Electronics
# 3 Keyboard 80 Accessories~ का उपयोग करके किसी शर्त को नकारना
~ टिल्ड ऑपरेटर बूलियन Series को उलट देता है — यह True को False और इसके विपरीत बदल देता है। 'NOT' तर्क व्यक्त करने के लिए ~ का उपयोग करें: ऐसी पंक्तियाँ रखें जो किसी शर्त से मेल नहीं खाती हों। यह विपरीत शर्त को हाथ से बनाने की तुलना में अधिक साफ़ तरीका है।
उदाहरण के लिए, df[~df['status'].isin(['cancelled', 'refunded'])] इन दो स्थितियों को छोड़कर बाकी सभी पंक्तियाँ रखता है।
import pandas as pd
df = pd.DataFrame({
'order_id': [1, 2, 3, 4],
'status': ['shipped', 'cancelled', 'delivered', 'refunded']
})
# Keep only rows that are NOT cancelled
active = df[~(df['status'] == 'cancelled')]
print(active)
# order_id status
# 0 1 shipped
# 2 3 delivered
# 3 4 refundedस्ट्रिंग मानों पर फ़िल्टर लगाना
बूलियन इंडेक्सिंग पाठ वाले स्तंभों पर भी उतनी ही अच्छी तरह काम करती है। आप == से सटीक मिलान कर सकते हैं या लचीले पाठ फ़िल्टर के लिए शर्त के भीतर .str विधियों, जैसे .str.startswith(), .str.contains() या .str.upper() का उपयोग कर सकते हैं।
Pandas में डिफ़ॉल्ट रूप से स्ट्रिंग तुलना अक्षर-रूप के प्रति संवेदनशील होती है, इसलिए 'NYC' और 'nyc' को अलग-अलग मान माना जाता है। आवश्यकता होने पर पहले अक्षर-रूप को सामान्य करें।
import pandas as pd
df = pd.DataFrame({
'country': ['USA', 'Germany', 'UK', 'USA', 'France'],
'sales': [400, 200, 150, 600, 300]
})
# Filter rows where country equals USA
us_sales = df[df['country'] == 'USA']
print(us_sales)
# country sales
# 0 USA 400
# 3 USA 600
# Filter rows where country starts with 'G'
g_countries = df[df['country'].str.startswith('G')]
print(g_countries)
# country sales
# 1 Germany 200कई स्तंभों पर फ़िल्टर लगाना
जटिल विश्लेषणों में अक्सर कई स्तंभों की शर्तों को & और | से मिलाना पड़ता है। बहुत लंबी शर्तों को पढ़ने में आसानी के लिए नामित बूलियन Series में बाँटें — प्रत्येक Series एक नामित उप-फ़िल्टर की तरह काम करेगी, जिन्हें अंत में मिलाया जा सकता है।
इस तरीके से आपका उद्देश्य स्पष्ट रहता है: प्रत्येक पंक्ति फ़िल्टर तर्क के एक भाग का वर्णन करने वाले हिंदी वाक्य की तरह पढ़ी जाती है।
import pandas as pd
df = pd.DataFrame({
'region': ['North', 'South', 'North', 'East'],
'year': [2022, 2023, 2023, 2022],
'profit': [5000, -200, 8000, 3000]
})
is_north = df['region'] == 'North'
is_2023 = df['year'] == 2023
is_profitable = df['profit'] > 0
result = df[is_north & is_2023 & is_profitable]
print(result)
# region year profit
# 2 North 2023 8000सशर्त स्तंभों के लिए np.where का उपयोग
बूलियन इंडेक्सिंग पंक्तियों को फ़िल्टर करती है, लेकिन कभी-कभी आप पंक्तियाँ हटाने के बजाय किसी शर्त के आधार पर नया स्तंभ जोड़ना चाहते हैं। np.where(condition, value_if_true, value_if_false) किसी स्तंभ पर तत्व-दर-तत्व लागू होने वाले if/else का वेक्टराइज़्ड समकक्ष है और lambda के साथ apply उपयोग करने की तुलना में बहुत तेज़ है।
import pandas as pd
import numpy as np
df = pd.DataFrame({
'score': [45, 72, 88, 61, 95]
})
# Create a new column based on a condition
df['grade'] = np.where(df['score'] >= 70, 'Pass', 'Fail')
print(df)
# score grade
# 0 45 Fail
# 1 72 Pass
# 2 88 Pass
# 3 61 Fail
# 4 95 Passफ़िल्टर किए गए उपसमुच्चय को मान असाइन करना
आप .loc[mask, column] की सहायता से फ़िल्टर की गई पंक्तियों के मानों को उसी स्थान पर अपडेट कर सकते हैं। उपसमुच्चय में मान सेट करने का यह सुरक्षित तरीका है — df[mask]['col'] = value जैसे chained indexing से SettingWithCopyWarning उत्पन्न हो सकती है, क्योंकि यह किसी प्रति पर काम करता है।
मूल DataFrame को उसी स्थान पर संशोधित करना हो तो हमेशा df.loc[mask, 'col'] = value को प्राथमिकता दें।
import pandas as pd
df = pd.DataFrame({
'item': ['A', 'B', 'C', 'D'],
'stock': [0, 5, 0, 12]
})
# Mark out-of-stock items
df.loc[df['stock'] == 0, 'status'] = 'Out of Stock'
df.loc[df['stock'] > 0, 'status'] = 'Available'
print(df)
# item stock status
# 0 A 0 Out of Stock
# 1 B 5 Available
# 2 C 0 Out of Stock
# 3 D 12 Availableमास्क की गणना और योग करना
चूँकि बूलियन मान अंदरूनी रूप से 1 (True) और 0 (False) होते हैं, इसलिए मेल खाने वाली पंक्तियों की संख्या गिनने के लिए आप मास्क पर .sum() कॉल कर सकते हैं या मेल खाने वाली पंक्तियों के अंश के लिए .mean() उपयोग कर सकते हैं। ये त्वरित गणनाएँ पंक्तियाँ चुनने के लिए फ़िल्टर लागू करने से पहले आपके फ़िल्टर तर्क की जाँच करने में सहायता करती हैं।
import pandas as pd
df = pd.DataFrame({'value': [10, 55, 30, 80, 20, 70]})
mask = df['value'] > 40
print('Count of rows > 40:', mask.sum()) # 3
print('Fraction > 40:', mask.mean().round(2)) # 0.5
# Now apply
print(df[mask])
# value
# 1 55
# 3 80
# 5 70त्वरित जाँच
DataFrames पर बूलियन इंडेक्सिंग की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: बूलियन मास्क किसी स्तंभ पर शर्त लागू करके पंक्तियों को फ़िल्टर करते हैं, & और | ऑपरेटर कई शर्तों को मिलाते हैं (Python के and/or नहीं), और ~ NOT तर्क के लिए बूलियन मास्क को उलट देता है। फ़िल्टर की गई पंक्तियों को सुरक्षित रूप से मान असाइन करने के लिए df.loc[mask, col] = value का उपयोग करें। आगे हम पठनीय स्ट्रिंग के रूप में फ़िल्टर लिखने की query() विधि का अध्ययन करेंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “DataFrames पर बूलियन इंडेक्सिंग” पाठ निःशुल्क है?
हाँ—“DataFrames पर बूलियन इंडेक्सिंग” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Pandas & NumPy Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“DataFrames पर बूलियन इंडेक्सिंग” में मैं क्या सीखूँगा?
किसी स्तंभ पर बूलियन शर्त लागू करके पंक्तियाँ फ़िल्टर कीजिए और & तथा | ऑपरेटरों से अनेक शर्तों को मिलाइए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Pandas & NumPy Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Pandas & NumPy Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Pandas & NumPy Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 1वाँ पाठ है।
“DataFrames पर बूलियन इंडेक्सिंग” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Pandas & NumPy Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Pandas & NumPy Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- DataFrames पर बूलियन इंडेक्सिंग
- query() विधि
- isin() और between() फ़िल्टर
- पैटर्न के आधार पर कॉलम चुनना