query() विधि
query() से पठनीय फ़िल्टर अभिव्यक्तियाँ स्ट्रिंग के रूप में लिखिए, @ से क्वेरी के भीतर Python चर उपयोग कीजिए और फ़िल्टरों को श्रृंखलाबद्ध कीजिए।
query() विधि, CoddyKit पर Pandas & NumPy Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Pandas & NumPy Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
query() का उपयोग क्यों करें
Pandas का बूलियन इंडेक्सिंग शक्तिशाली है, लेकिन कई शर्तों को मिलाने पर यह अनावश्यक रूप से लंबा हो सकता है। query() विधि आपको फ़िल्टर अभिव्यक्तियाँ साधारण स्ट्रिंग के रूप में लिखने देती है, जिसे कई लोग अधिक पठनीय मानते हैं — विशेषकर वे लोग जो SQL की पृष्ठभूमि से आते हैं। df[(df['age'] > 30) & (df['salary'] > 50000)] लिखने के बजाय आप df.query('age > 30 and salary > 50000') लिख सकते हैं।
क्वेरी स्ट्रिंग का मूल्यांकन DataFrame के कॉलम नामों के आधार पर किया जाता है, इसलिए स्ट्रिंग के भीतर कॉलम नाम चर नामों की तरह काम करते हैं।
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Carol', 'Dave'],
'age': [25, 35, 28, 45],
'salary': [50000, 90000, 70000, 120000]
})
# Boolean indexing style
result1 = df[(df['age'] > 27) & (df['salary'] > 60000)]
# Equivalent query() style
result2 = df.query('age > 27 and salary > 60000')
print(result2)
# name age salary
# 1 Bob 35 90000
# 2 Carol 28 70000क्वेरी स्ट्रिंग के भीतर सिंटैक्स के नियम
क्वेरी स्ट्रिंग के भीतर आप मानक Python तुलना ऑपरेटर (>, <, ==, !=, >=, <=) और तार्किक संयोजक and, or, not इस्तेमाल कर सकते हैं। सामान्य बूलियन इंडेक्सिंग के विपरीत, यहाँ आप अंग्रेज़ी शब्दों का इस्तेमाल कर सकते हैं — एम्परसैंड या पाइप की आवश्यकता नहीं होती।
जिन कॉलम नामों में रिक्त स्थान हों या जो Python के आरक्षित शब्दों से टकराते हों, उन्हें बैकटिक में लिखना आवश्यक है: df.query('`first name` == "Alice"')।
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'price': [10, 200, 50, 300],
'in_stock': [True, False, True, True]
})
# Use 'and', 'or', 'not' in query strings
result = df.query('price > 40 and in_stock == True')
print(result)
# product price in_stock
# 2 C 50 True
# 3 D 300 True@ के साथ Python चरों का संदर्भ देना
query() की एक प्रमुख विशेषता आसपास के दायरे से Python चरों का संदर्भ @ उपसर्ग के साथ लेने की क्षमता है। इससे फ़िल्टर में पैरामीटर देना आसान हो जाता है: कोई सीमा निर्धारित करें, उसे एक चर में संग्रहित करें, फिर मान को सीधे लिखने के बजाय क्वेरी स्ट्रिंग के भीतर @variable_name का इस्तेमाल करें।
यह तरीका उन फ़ंक्शनों में बहुत उपयोगी है जो चलने के समय फ़िल्टर तर्क स्वीकार करते हैं।
import pandas as pd
df = pd.DataFrame({
'city': ['NYC', 'LA', 'Chicago', 'Houston'],
'population': [8336817, 3979576, 2693976, 2320268]
})
min_pop = 3_000_000 # Python variable
# Use @ to inject the variable into the query
result = df.query('population > @min_pop')
print(result)
# city population
# 0 NYC 8336817
# 1 LA 3979576query() कॉल की शृंखला बनाना
क्योंकि query() एक नया DataFrame लौटाता है, आप कई query कॉल की शृंखला बना सकते हैं या उन्हें अन्य Pandas विधियों के साथ एक प्रसंस्करण-श्रृंखला में मिला सकते हैं। शृंखला बनाने से फ़िल्टर करने का प्रत्येक चरण अपनी अलग पंक्ति में रहता है, जिससे तर्क को पढ़ना, त्रुटि ढूँढ़ना और बदलना आसान होता है।
आप संक्षिप्त विश्लेषण-श्रृंखलाएँ बनाने के लिए query() को .groupby(), .sort_values() या .head() जैसी विधियों के साथ भी जोड़ सकते हैं।
import pandas as pd
df = pd.DataFrame({
'region': ['North', 'South', 'North', 'East', 'South'],
'year': [2022, 2022, 2023, 2023, 2023],
'revenue': [100, 200, 150, 80, 300]
})
# Chain two query calls
result = (df
.query('year == 2023')
.query('revenue > 100')
.sort_values('revenue', ascending=False)
)
print(result)
# region year revenue
# 4 South 2023 300
# 2 North 2023 150query() और बूलियन इंडेक्सिंग की तुलना
दोनों विधियाँ एक ही परिणाम देती हैं, लेकिन प्रत्येक का अपना उपयोग है। query() उन बहु-शर्तीय फ़िल्टरों के लिए बेहतर है जिनमें बूलियन इंडेक्सिंग के साथ बहुत-से कोष्ठकों की आवश्यकता होती। बूलियन इंडेक्सिंग तब बेहतर है जब आपकी शर्त में जटिल Python अभिव्यक्तियाँ हों, जैसे ऐसी विधि-कॉल, जो क्वेरी स्ट्रिंग में समर्थित नहीं हैं।
अधिकांश स्थितियों में प्रदर्शन समान रहता है; बहुत बड़े DataFrame पर query() थोड़ा तेज़ हो सकता है, क्योंकि यह पर्दे के पीछे numexpr लाइब्रेरी का इस्तेमाल करता है।
import pandas as pd
df = pd.DataFrame({
'A': range(10),
'B': range(10, 20)
})
# Boolean indexing
result_bool = df[(df['A'] > 2) & (df['B'] < 18) & (df['A'] != 5)]
# Equivalent query — much more readable
result_query = df.query('A > 2 and B < 18 and A != 5')
print(result_query)
# A B
# 3 3 13
# 4 4 14
# 6 6 16
# 7 7 17query() में स्ट्रिंग की तुलना
क्वेरी स्ट्रिंग में स्ट्रिंग शाब्दिक को उद्धरण चिह्नों में लिखकर आप स्ट्रिंग कॉलम के मानों पर फ़िल्टर लगा सकते हैं। बाहरी क्वेरी स्ट्रिंग के लिए दोहरे उद्धरण और स्ट्रिंग मान के लिए एकल उद्धरण इस्तेमाल करें, या इसका उलटा करें — बस पूरे कोड में एक ही तरीका अपनाएँ। ध्यान दें कि query() .str की contains() जैसी विधियों का समर्थन नहीं करता; इनके लिए .str के साथ बूलियन इंडेक्सिंग इस्तेमाल करें।
import pandas as pd
df = pd.DataFrame({
'country': ['USA', 'UK', 'Canada', 'USA', 'Germany'],
'sales': [400, 150, 200, 600, 300]
})
# Single quotes for the string value inside double-quoted query
result = df.query('country == "USA"')
print(result)
# country sales
# 0 USA 400
# 3 USA 600in और not in ऑपरेटर का इस्तेमाल
क्वेरी स्ट्रिंग के भीतर Pandas सदस्यता जाँच के लिए in और not in ऑपरेटरों का समर्थन करता है, जो Python सूचियों के समान हैं। यह कई == शर्तों को or से जोड़ने का एक साफ़ विकल्प है। मानों की सूची सीधे क्वेरी स्ट्रिंग में लिखी जाती है।
import pandas as pd
df = pd.DataFrame({
'status': ['active', 'inactive', 'pending', 'active', 'closed'],
'amount': [100, 200, 50, 300, 150]
})
# Keep rows where status is in a specific list
result = df.query('status in ["active", "pending"]')
print(result)
# status amount
# 0 active 100
# 2 pending 50
# 3 active 300
# Exclude certain statuses
excluded = df.query('status not in ["closed", "inactive"]')
print(excluded.shape) # (3, 2)query() से संख्यात्मक सीमा वाले फ़िल्टर
Python की शृंखलाबद्ध तुलनाएँ, जैसे 10 < price < 500, क्वेरी स्ट्रिंग के भीतर काम करती हैं, जिससे सीमा वाले फ़िल्टर बहुत अभिव्यक्तिपूर्ण बन जाते हैं। मानक बूलियन इंडेक्सिंग में यह between() का इस्तेमाल किए बिना या & से जुड़ी दो अलग शर्तों के बिना संभव नहीं है।
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C', 'D', 'E'],
'price': [5, 50, 150, 300, 500]
})
# Chained comparison — only works inside query()
result = df.query('50 <= price <= 300')
print(result)
# product price
# 1 B 50
# 2 C 150
# 3 D 300query() की सीमाएँ
query() शक्तिशाली है, लेकिन इसकी कुछ सीमाएँ हैं। जिन कॉलम नामों में रिक्त स्थान या विशेष वर्ण हों, उन्हें बैकटिक में लिखना आवश्यक है। बहुत जटिल Python अभिव्यक्तियाँ, जैसे कस्टम फ़ंक्शन या कई पंक्तियों वाला तर्क, स्ट्रिंग के भीतर समर्थित नहीं हैं। इसके अलावा, यदि कॉलम नाम class या if जैसे Python आरक्षित शब्दों से टकराएँ, तो query() अनपेक्षित परिणाम दे सकता है — ऐसे नामों को भी बैकटिक में लिखें।
query() से जिसे साफ़-सुथरे ढंग से व्यक्त न किया जा सके, उसके लिए मानक बूलियन इंडेक्सिंग अपनाएँ।
import pandas as pd
df = pd.DataFrame({'first name': ['Alice', 'Bob'], 'class': [1, 2]})
# Backtick-quote column names with spaces or reserved words
result = df.query('`first name` == "Alice" and `class` == 1')
print(result)
# first name class
# 0 Alice 1व्यावहारिक उदाहरण: ऑर्डर फ़िल्टर करना
यहाँ query() को एक चर संदर्भ और groupby की शृंखला के साथ मिलाने का व्यावहारिक उदाहरण दिया गया है। यह तरीका — पहले फ़िल्टर करना, फिर समुच्चय बनाना — उन पंक्तियों को संसाधित करने से बचाता है जिनकी आवश्यकता नहीं है, इसलिए बड़े डेटासेट पर यह अधिक स्पष्ट और तेज़ दोनों होता है।
import pandas as pd
orders = pd.DataFrame({
'region': ['East', 'West', 'East', 'West', 'East'],
'year': [2023, 2023, 2024, 2024, 2024],
'revenue': [100, 200, 300, 400, 500]
})
min_year = 2024
# Filter to recent orders in the East region, then sum revenue
summary = (
orders
.query('year >= @min_year and region == "East"')
.groupby('region')['revenue'].sum()
)
print(summary)
# region
# East 800
# Name: revenue, dtype: int64query() और विधि-शृंखला की सर्वोत्तम प्रथाएँ
आधुनिक Pandas कोड में विधि-शृंखला के भीतर query() का इस्तेमाल करना एक सर्वोत्तम प्रथा है। इससे रूपांतरण-श्रृंखला का प्रत्येक चरण स्पष्ट और स्वयं-व्याख्यात्मक बनता है। पूरी शृंखला को कोष्ठकों में रखें, ताकि बैकस्लैश के बिना उसे कई पंक्तियों में बाँटा जा सके।
पूरी तरह पठनीय प्रसंस्करण-श्रृंखलाएँ बनाने के लिए कॉलम जोड़ने हेतु query() को assign() के साथ, समुच्चयन हेतु groupby() के साथ और कस्टम फ़ंक्शनों हेतु pipe() के साथ मिलाएँ।
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR'],
'salary': [90000, 50000, 120000, 70000, 55000],
'years': [3, 5, 8, 2, 4]
})
result = (
df
.query('years > 2 and dept != "HR"')
.assign(bonus=lambda x: x['salary'] * 0.1)
.sort_values('salary', ascending=False)
)
print(result[['dept', 'salary', 'bonus']])
# dept salary bonus
# 2 Eng 120000 12000.0
# 0 Eng 90000 9000.0त्वरित जाँच
query() विधि की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: query() फ़िल्टर अभिव्यक्तियों को स्ट्रिंग के रूप में स्वीकार करता है, जिससे बहु-शर्तीय फ़िल्टर अधिक पठनीय बनते हैं; @variable_name Python चरों को क्वेरी में शामिल करता है; और आप in/not in तथा शृंखलाबद्ध तुलनाओं का इस्तेमाल कर सकते हैं, जो मानक बूलियन इंडेक्सिंग में संभव नहीं हैं। आगे हम संक्षिप्त सदस्यता और सीमा वाले फ़िल्टरों के लिए isin() और between() का अध्ययन करेंगे।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “query() विधि” पाठ निःशुल्क है?
हाँ—“query() विधि” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Pandas & NumPy Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“query() विधि” में मैं क्या सीखूँगा?
query() से पठनीय फ़िल्टर अभिव्यक्तियाँ स्ट्रिंग के रूप में लिखिए, @ से क्वेरी के भीतर Python चर उपयोग कीजिए और फ़िल्टरों को श्रृंखलाबद्ध कीजिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Pandas & NumPy Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Pandas & NumPy Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Pandas & NumPy Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।
“query() विधि” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Pandas & NumPy Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Pandas & NumPy Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।