Pandas बनाम SQL: सही उपकरण चुनना
Pandas में groupby/merge की तुलना SQL में GROUP BY/JOIN से कीजिए और तय कीजिए कि प्रत्येक रूपांतरण किस स्तर पर होना चाहिए।
Pandas बनाम SQL: सही उपकरण चुनना, CoddyKit पर Pandas & NumPy Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Pandas & NumPy Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
दो उपकरण, पूरक खूबियाँ
Pandas और SQL दोनों डेटा में हेरफेर करने के उपकरण हैं और पेशेवर डेटा विश्लेषक दोनों का उपयोग करते हैं। मुख्य बात यह है कि वे प्रतिस्पर्धी नहीं, बल्कि पूरक हैं: SQL संबंधपरक डेटाबेस में संग्रहीत बड़ी टेबलों पर घोषणात्मक, समुच्चय-आधारित क्रियाओं में उत्कृष्ट है, जबकि Pandas मेमोरी में पहले से लोड डेटा पर प्रक्रियात्मक, पंक्ति-दर-पंक्ति और जटिल एल्गोरिथ्मिक रूपांतरणों में उत्कृष्ट है। सर्वोत्तम कार्यप्रवाह प्रत्येक उपकरण का उपयोग उसी काम के लिए करते हैं जिसे वह सबसे अच्छी तरह करता है।
SQL की खूबियाँ: SQL क्या बेहतर करता है
SQL आमतौर पर तब बेहतर होता है जब: डेटा बड़ा हो (गीगाबाइट से टेराबाइट तक) और लोड करने से पहले उसकी छनाई करनी हो; जोड़ अनेक बड़ी टेबलों तक फैले हों और डेटाबेस इंडेक्स गति में कई गुना सुधार देते हों; समुच्चयन सरल हों (SUM, COUNT, GROUP BY); परिणाम-समुच्चय इनपुट की तुलना में छोटा हो; या एक साथ पढ़ने/लिखने की आवश्यकता हो (डेटाबेस लेन-देन और लॉकिंग संभालता है)। SQL का घोषणात्मक सिंटैक्स क्वेरी ऑप्टिमाइज़र को सर्वोत्तम भौतिक योजना अपने-आप चुनने की सुविधा भी देता है।
-- SQL excels at:
-- 1. Filtering billions of rows using an index
SELECT * FROM orders WHERE customer_id = 12345;
-- 2. Joining large tables efficiently
SELECT o.order_id, c.name, SUM(o.amount)
FROM orders o
JOIN customers c ON o.customer_id = c.id
GROUP BY o.order_id, c.name;
-- 3. Window functions on ordered data
SELECT order_id, amount,
SUM(amount) OVER (PARTITION BY customer_id ORDER BY order_date)
FROM orders;Pandas की खूबियाँ: Pandas क्या बेहतर करता है
Pandas आमतौर पर तब बेहतर होता है जब: आपको ऐसा कस्टम Python तर्क चाहिए जिसे SQL व्यक्त नहीं कर सकता (मशीन लर्निंग प्रीप्रोसेसिंग, कस्टम स्ट्रिंग पार्सिंग, जटिल एल्गोरिद्म); डेटा रूपांतरण शृंखलाएँ कई चरणों वाली हों; विश्लेषण के तुरंत बाद दृश्यांकन चाहिए; डेटा पहले से मेमोरी में हो और SQL के आगे-पीछे के अनुरोधों से विलंबता बढ़े; या आप अन्वेषणात्मक विश्लेषण कर रहे हों, जिसमें इंटरैक्टिव रूप से दोहराव करना हो। Pandas मैट्रिक्स गणना और समय-शृंखला स्मूदिंग जैसे गैर-सारणीबद्ध कार्य भी संभालता है।
import pandas as pd
# Pandas excels at:
# 1. Custom Python logic that SQL cannot express
df['clean_name'] = df['name'].str.strip().str.title().str.replace(r'[^a-zA-Z ]', '', regex=True)
# 2. Vectorised string parsing
df[['first', 'last']] = df['full_name'].str.split(' ', n=1, expand=True)
# 3. Rolling statistics and time series
df['7day_avg'] = df['daily_sales'].rolling(7).mean()
# 4. Direct visualisation
# df.groupby('category')['sales'].sum().plot(kind='bar')SQL क्रियाओं को Pandas में मैप करना
अधिकांश SQL क्रियाओं के सीधे Pandas समकक्ष होते हैं। दोनों सिंटैक्स जानने से आपकी बहुमुखी प्रतिभा बढ़ती है और उपकरण बदलते समय उनके बीच रूपांतरण करने में सहायता मिलती है। WHERE बूलियन इंडेक्सिंग या .query() बन जाता है; GROUP BY + SUM .groupby().sum() बन जाता है; JOIN pd.merge() बन जाता है; ORDER BY .sort_values() बन जाता है; और DISTINCT .drop_duplicates() बन जाता है। अर्थ समान रहता है; केवल सिंटैक्स अलग होता है।
import pandas as pd
df = pd.DataFrame({'region': ['N','S','N','E'], 'amount': [100,200,150,300]})
# SQL: SELECT region, SUM(amount) FROM df WHERE amount>100 GROUP BY region ORDER BY region
# Pandas:
result = (
df[df['amount'] > 100]
.groupby('region')['amount']
.sum()
.reset_index()
.sort_values('region')
)
print(result)डेटा का आकार चुनाव कैसे तय करता है
डेटा के आकार पर आधारित एक व्यावहारिक निर्णय-ढाँचा: 100 MB से कम — पूरी तरह Pandas का उपयोग करें, SQL का अतिरिक्त खर्च उचित नहीं है; 100 MB – 10 GB — SQL में छनाई और समुच्चयन करें, फिर सारांश DataFrame को Pandas में लोड करें; 10 GB – 1 TB — संसाधन के लिए SQL या Dask का उपयोग करें, Pandas केवल अंतिम सारांश के लिए; 1 TB से अधिक — वितरित SQL (BigQuery, Spark SQL, Redshift) का उपयोग करें। 16 GB वाले लैपटॉप पर 100 GB की टेबल को Pandas में लोड करने का प्रयास कभी न करें — यह क्रैश हो जाएगा या डिस्क पर अत्यधिक दबाव डालेगा।
import pandas as pd
import sqlalchemy as sa
engine = sa.create_engine('sqlite:///large.db')
# Right approach: SQL handles the heavy lifting
summary_df = pd.read_sql_query(
'''
SELECT region, product_category,
SUM(revenue) AS total_revenue,
COUNT(DISTINCT customer_id) AS unique_customers
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY region, product_category
''',
con=engine
)
# summary_df is small — now do Pandas things on it
print(summary_df.sort_values('total_revenue', ascending=False))SQL विंडो फ़ंक्शन बनाम Pandas Rolling
SQL के विंडो फ़ंक्शन (OVER (PARTITION BY ... ORDER BY ...)) शक्तिशाली हैं, लेकिन उनकी कुछ सीमाएँ हैं: वे चलते हुए रैंक, lag/lead और सरल rolling समुच्चयों की गणना अच्छी तरह करते हैं, पर जटिल rolling सांख्यिकी (जैसे rolling Pearson correlation) को SQL में व्यक्त नहीं किया जा सकता। Pandas के rolling() और expanding() विंडो गणनाओं की कहीं अधिक विस्तृत श्रेणी उपलब्ध कराते हैं, जिनमें .apply() के माध्यम से कस्टम फ़ंक्शन भी शामिल हैं। बड़े डेटा पर मानक विंडो फ़ंक्शन के लिए SQL को प्राथमिकता दें; जटिल विंडो तर्क के लिए Pandas को प्राथमिकता दें।
import pandas as pd
df = pd.DataFrame({
'date': pd.date_range('2024-01-01', periods=30),
'sales': [100 + i*10 + (i%7)*20 for i in range(30)]
})
# Pandas rolling — easy with arbitrary window functions
df['7d_mean'] = df['sales'].rolling(7).mean()
df['7d_std'] = df['sales'].rolling(7).std()
df['7d_corr'] = df['sales'].rolling(7).corr(df['sales'].shift(1))
print(df.tail())जटिल जोड़: Pandas की लचीलापन
SQL के जोड़ कुंजी-समानता पर आधारित होते हैं (कुछ अपवादों को छोड़कर)। Pandas का pd.merge_asof() समय-आधारित अस्पष्ट जोड़ का समर्थन करता है (सटीक समानता के बजाय निकटतम कुंजी का मिलान), जो समय-श्रृंखला संरेखण के लिए अत्यंत उपयोगी है (जैसे, शेयर कीमतों को निकटतम पिछली कीमत पर व्यापार घटनाओं से जोड़ना)। Pandas फ़िल्टरिंग के बाद merge का उपयोग करके सशर्त जोड़ का भी समर्थन करता है, जबकि SQL में इसे व्यक्त करने के लिए उपक्वेरी या LATERAL जोड़ आवश्यक होता है। ये उन्नत जोड़ पैटर्न उन क्षेत्रों में से एक हैं जहाँ Pandas स्पष्ट रूप से बेहतर है।
import pandas as pd
trades = pd.DataFrame({
'time': pd.to_datetime(['2024-01-01 10:00', '2024-01-01 10:05', '2024-01-01 10:12']),
'symbol': ['AAPL', 'AAPL', 'AAPL'],
'shares': [100, 200, 50]
})
prices = pd.DataFrame({
'time': pd.to_datetime(['2024-01-01 10:00', '2024-01-01 10:10']),
'price': [185.0, 186.5]
})
# Fuzzy join: match each trade to the nearest preceding price
result = pd.merge_asof(trades.sort_values('time'),
prices.sort_values('time'),
on='time', direction='backward')
print(result)डेटा प्रोफ़ाइलिंग के लिए Pandas, उत्पादन के लिए SQL
एक सामान्य कार्यप्रवाह यह है: प्रतिनिधि नमूने (जैसे, पहली दस लाख पंक्तियों) पर EDA और डेटा प्रोफ़ाइलिंग के लिए Pandas का उपयोग करें, अपनी रूपांतरण तर्क को बार-बार विकसित करें, फिर मुख्य चरणों को उत्पादन पैमाने के लिए SQL में बदलें। Pandas तत्काल दृश्य प्रतिक्रिया के साथ तेज़ पुनरावृत्ति की सुविधा देता है; SQL न्यूनतम आधारभूत संरचना के साथ बड़े पैमाने पर विश्वसनीय रूप से चलता है। दोनों को समन्वित रखें: जब आप Pandas में कोई नई सुविधा जोड़ें, तो उत्पादन के लिए उसकी समतुल्य SQL संग्रहीत प्रक्रिया या दृश्य लिखें।
import pandas as pd
import sqlalchemy as sa
engine = sa.create_engine('sqlite:///data.db')
# Development: sample in Pandas for fast iteration
df_sample = pd.read_sql_query(
'SELECT * FROM orders ORDER BY RANDOM() LIMIT 10000',
con=engine
)
# Explore and prototype:
df_sample['revenue_tier'] = pd.cut(
df_sample['amount'],
bins=[0, 100, 500, float('inf')],
labels=['low', 'mid', 'high']
)
print(df_sample['revenue_tier'].value_counts())
# Production: translate cut logic to SQL CASE WHENpandasql: DataFrames पर SQL लिखना
pandasql लाइब्रेरी आपको SQLite का आंतरिक रूप से उपयोग करके सीधे Pandas DataFrames पर SQL क्वेरी लिखने देती है। sqldf('SELECT * FROM df WHERE amount > 100', locals()) क्वेरी को df DataFrame पर चलाती है। यह तब उपयोगी है जब आप SQL के अनुसार सोचते हैं, लेकिन आपका डेटा पहले से Pandas में है, या मेमोरी में मौजूद डेटा के साथ SQL अवधारणाएँ सिखानी हों। हालाँकि, अधिकांश कार्यों के लिए यह मूल Pandas से धीमी है — इसका उपयोग परिचितता के लिए करें, प्रदर्शन के लिए नहीं।
# pip install pandasql
import pandas as pd
# from pandasql import sqldf
df = pd.DataFrame({
'product': ['A', 'B', 'A', 'C', 'B'],
'sales': [100, 200, 150, 80, 220]
})
# With pandasql (commented out as it requires install):
# result = sqldf('SELECT product, SUM(sales) AS total FROM df GROUP BY product', locals())
# Equivalent native Pandas:
result = df.groupby('product')['sales'].sum().reset_index()
print(result)निर्णय ढाँचा: त्वरित संदर्भ
SQL और Pandas के बीच चयन करते समय इस निर्णय मार्गदर्शिका का उपयोग करें:
- डेटा डेटाबेस में है और बड़ा भी है? पहले SQL में फ़िल्टर और समुच्चय करें।
- कस्टम Python तर्क की आवश्यकता है? SQL में पहले से फ़िल्टर करने के बाद Pandas का उपयोग करें।
- नमूने पर अन्वेषणात्मक विश्लेषण करना है? Pandas तेज़ पुनरावृत्ति देता है।
- जटिल rolling आँकड़ों वाली समय-श्रृंखला है? Pandas rolling/ewm का उपयोग करें।
- लाखों पंक्तियों पर सरल GROUP BY है? इंडेक्स के साथ SQL का उपयोग करें।
- कई छोटे DataFrames पहले से मेमोरी में हैं? pd.merge() पर्याप्त है।
- ACID लेन-देन की आवश्यकता है? Pandas के बजाय SQL डेटाबेस का उपयोग करें।
दोनों का संयोजन: हाइब्रिड पाइपलाइन
सबसे व्यावहारिक तरीका एक हाइब्रिड पाइपलाइन है, जो प्रत्येक उपकरण की खूबियों का लाभ उठाती है। SQL बड़े कच्चे तालिकाओं पर डेटा ग्रहण, मोटा फ़िल्टर और मानक समुच्चयों को संभालता है। इसका आउटपुट — एक प्रबंधनीय DataFrame — फ़ीचर इंजीनियरिंग, कस्टम मेट्रिक्स, rolling आँकड़ों और दृश्यांकन के लिए Pandas को सौंप दिया जाता है। परिणामों को वैकल्पिक रूप से डेटा परोसने के लिए डेटाबेस में वापस लिखा जा सकता है। यह पाइपलाइन पढ़ने योग्य, विस्तार योग्य और SQL तथा Python दोनों जानने वाले किसी भी विश्लेषक के लिए रखरखाव योग्य है।
import pandas as pd
import sqlalchemy as sa
engine = sa.create_engine('sqlite:///pipeline.db')
# Step 1: SQL coarse aggregation
df = pd.read_sql_query('''
SELECT DATE(order_date) AS date, region, SUM(amount) AS daily_revenue
FROM orders WHERE status = 'completed'
GROUP BY DATE(order_date), region
ORDER BY date
''', con=engine, parse_dates=['date'])
# Step 2: Pandas rolling and pivoting (hard in SQL)
df['7d_avg'] = df.groupby('region')['daily_revenue'].transform(
lambda x: x.rolling(7, min_periods=1).mean()
)
pivot = df.pivot(index='date', columns='region', values='7d_avg')
print(pivot.tail())त्वरित जाँच
इस पाठ की डेटा विश्लेषण अवधारणाओं की अपनी समझ जाँचें।
पाठ का पुनरावलोकन
इस पाठ में आपने सीखा: बड़े पैमाने पर फ़िल्टरिंग, जोड़ और इंडेक्स किए गए डेटा पर सरल समुच्चयों के लिए SQL उत्कृष्ट है, कस्टम Python तर्क, जटिल rolling आँकड़ों और अन्वेषणात्मक विश्लेषण के लिए Pandas उत्कृष्ट है, और सर्वोत्तम रणनीति एक हाइब्रिड पाइपलाइन है, जो मोटे स्तर पर डेटा घटाने के लिए SQL तथा प्रबंधनीय परिणाम पर जटिल रूपांतरणों के लिए Pandas का उपयोग करती है। अब हम SciPy के साथ अनुमानात्मक सांख्यिकी शुरू करेंगे: सामान्यता परीक्षण और वर्णनात्मक आँकड़े।
एआई शिक्षक के साथ Python सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 30
- पाठ
- 120
अक्सर पूछे जाने वाले प्रश्न
क्या “Pandas बनाम SQL: सही उपकरण चुनना” पाठ निःशुल्क है?
हाँ—“Pandas बनाम SQL: सही उपकरण चुनना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Pandas & NumPy Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Pandas & NumPy Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Pandas बनाम SQL: सही उपकरण चुनना” में मैं क्या सीखूँगा?
Pandas में groupby/merge की तुलना SQL में GROUP BY/JOIN से कीजिए और तय कीजिए कि प्रत्येक रूपांतरण किस स्तर पर होना चाहिए। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Pandas & NumPy Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Pandas & NumPy Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Pandas & NumPy Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“Pandas बनाम SQL: सही उपकरण चुनना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Pandas & NumPy Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Pandas & NumPy Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- SQLAlchemy से डेटाबेस से जुड़ना
- Pandas से SQL क्वेरी चलाना
- DataFrames को डेटाबेस तालिकाओं में लिखना
- Pandas बनाम SQL: सही उपकरण चुनना