पाइथन पांडा - II में हम डेटाफ्रेम और सीरीज़ के साथ उन्नत डेटा प्रबंधन संक्रियाओं का अध्ययन करेंगे। पहले अध्याय में हमने डेटा संरचनाओं के निर्माण और डेटा एक्सेस को सीखा। इस अध्याय में हम स्तंभ जोड़ना, स्तंभ हटाना, पंक्ति जोड़ना, पंक्ति हटाना, डेटा फ़िल्टर करना, डेटाफ्रेम जोड़ना (concatenation), डेटा सॉर्ट करना तथा सीरीज़ और डेटाफ्रेम की विभिन्न अंकगणितीय संक्रियाओं का अध्ययन करेंगे। ये संक्रियाएं वास्तविक डेटा विश्लेषण के दौरान दिन-प्रतिदिन उपयोग होती हैं।
डेटाफ्रेम में नया स्तंभ जोड़ने के लिए नए कॉलम नाम के साथ मानों की सूची (या सीरीज़) निर्दिष्ट की जाती है:
import pandas as pd
df = pd.DataFrame({'नाम': ['राम', 'सीता', 'गीता'], 'अंक': [85, 92, 78]})
df['ग्रेड'] = ['A', 'A+', 'B']
print(df)
यहाँ 'ग्रेड' नामक नया स्तंभ डेटाफ्रेम के अंत में जुड़ जाता है। मानों की सूची की लंबाई पंक्तियों की संख्या के बराबर होनी चाहिए।
किसी स्तंभ को हटाने के लिए del कथन या drop() विधि का उपयोग किया जाता है:
del df['ग्रेड']
df = df.drop(columns=['अंक'])
print(df)
drop() विधि में axis=1 या columns= पैरामीटर द्वारा स्तंभ हटाए जाते हैं। ध्यान रहे कि drop() डिफ़ॉल्ट रूप से नया डेटाफ्रेम लौटाता है, मूल डेटाफ्रेम में परिवर्तन के लिए inplace=True देना होता है।
डेटाफ्रेम के अंत में पंक्ति जोड़ने के लिए loc के साथ नए सूचकांक पर मानों की सूची निर्दिष्ट की जाती है:
df.loc['r4'] = ['मोहन', 88]
print(df)
यदि पंक्तियों की संख्या बढ़ानी है तो loc का उपयोग करते समय नया सूचकांक लेबल प्रदान करें। पंक्ति जोड़ने का दूसरा तरीका pd.concat() का उपयोग करना है।
पंक्ति हटाने के लिए drop() विधि में सूचकांक लेबल दिए जाते हैं:
df = df.drop('r4')
print(df)
drop('r4') डिफ़ॉल्ट रूप से axis=0 पर कार्य करता है, अर्थात पंक्ति हटाता है। एक साथ अनेक पंक्तियों को सूची देकर हटाया जा सकता है।
शब्दकोश से सीरीज़ बनाकर डेटाफ्रेम में स्तंभ के रूप में जोड़ा जा सकता है:
import pandas as pd
df = pd.DataFrame({'नाम': ['राम', 'सीता', 'गीता']}, index=['a', 'b', 'c'])
s = pd.Series({'a': 85, 'b': 92, 'c': 78})
df['अंक'] = s
print(df)
यहाँ शब्दकोश की कुंजियां सूचकांक के रूप में मेल खाती हैं, इसलिए अंक सही क्रम में जुड़ते हैं। यदि सूचकांक मेल नहीं खाते तो NaN मान आते हैं।
डेटा फ़िल्टर करने के लिए बूलियन स्थितियों का उपयोग किया जाता है। शर्त संतुष्ट करने वाली पंक्तियां ही चुनी जाती हैं:
import pandas as pd
df = pd.DataFrame({'नाम': ['राम', 'सीता', 'गीता', 'मोहन'], 'अंक': [85, 92, 78, 88]})
उत्तीर्ण = df[df['अंक'] >= 80]
print(उत्तीर्ण)
# तार्किक संचालकों से जटिल फ़िल्टर
f = df[(df['अंक'] >= 80) & (df['अंक'] <= 90)]
print(f)
बूलियन फ़िल्टरिंग में & (AND), | (OR) और ~ (NOT) संचालकों का उपयोग होता है। प्रत्येक शर्त को कोष्ठक (parentheses) में रखना अनिवार्य है। यह अध्याय का सबसे महत्वपूर्ण विषय है।
डेटाफ्रेम में स्तंभों (सीरीज़) के बीच अंकगणितीय संक्रियाएं की जा सकती हैं:
df['कुल'] = df['प्रथम'] + df['द्वितीय']
df['औसत'] = df['कुल'] / 2
print(df)
सीरीज़ और स्केलर के बीच भी संक्रियाएं संभव हैं:
s = pd.Series([10, 20, 30])
print(s * 2)
print(s + 100)
सीरीज़ की सांख्यिकीय विधियां जैसे sum(), mean(), median(), min(), max(), count(), std(), var() भी उपयोगी हैं:
print(s.sum())
print(s.mean())
print(s.min())
print(s.max())
दो या दो से अधिक सीरीज़ों या डेटाफ्रेमों को जोड़ने के लिए pd.concat() का उपयोग होता है:
import pandas as pd
s1 = pd.Series([10, 20, 30])
s2 = pd.Series([40, 50, 60])
s3 = pd.concat([s1, s2])
print(s3)
डेटाफ्रेम को पंक्ति के अनुसार जोड़ने के लिए axis=0 (डिफ़ॉल्ट) और स्तंभ के अनुसार जोड़ने के लिए axis=1 का उपयोग किया जाता है:
df1 = pd.DataFrame({'A': [1, 2]})
df2 = pd.DataFrame({'B': [3, 4]})
df_बार = pd.concat([df1, df2], axis=1)
print(df_बार)
डेटा को किसी स्तंभ या सूचकांक के आधार पर क्रमबद्ध किया जा सकता है:
import pandas as pd
df = pd.DataFrame({'नाम': ['राम', 'सीता', 'गीता'], 'अंक': [85, 92, 78]})
df_आरोही = df.sort_values(by='अंक')
print(df_आरोही)
df_अवरोही = df.sort_values(by='अंक', ascending=False)
print(df_अवरोही)
sort_values() — मान के आधार पर सॉर्ट करता है।sort_index() — सूचकांक के आधार पर सॉर्ट करता है।ascending=False — अवरोही क्रम के लिए।एक से अधिक स्तंभों के आधार पर सॉर्ट करने के लिए by=['कॉलम1', 'कॉलम2'] सूची का उपयोग करें।
df.shape — (पंक्तियां, स्तंभ) लौटाता है।df.info() — डेटाफ्रेम की संक्षिप्त जानकारी देता है (डेटाटाइप, गैर-नल मानों की संख्या)।df.dtypes — प्रत्येक स्तंभ का डेटाटाइप लौटाता है।len(df) — पंक्तियों की संख्या देता है।df.count() — प्रत्येक स्तंभ के गैर-शून्य (non-null) मानों की संख्या।print(df.shape)
print(df.dtypes)
print(df.info())
डेटा का सांख्यिकीय विश्लेषण करने के लिए डेटाफ्रेम अनेक संकलन विधियां प्रदान करता है। df.sum(), df.mean(), df.median(), df.min(), df.max() और df.count() जैसी विधियां प्रत्येक स्तंभ पर लागू होकर एकल मानों की सीरीज़ लौटाती हैं। उदाहरण के लिए, df.mean() सभी संख्यात्मक स्तंभों का औसत देता है और df.sum() प्रत्येक स्तंभ का योग निकालता है। df.agg() विधि के द्वारा एक साथ कई संकलन फलन लागू किए जा सकते हैं, जैसे df.agg(['sum', 'mean', 'max'])। यह विधि एक साथ कई सांख्यिकीय माप प्राप्त करने के लिए बहुत सुविधाजनक होती है। groupby के साथ संकलन करने से प्रत्येक समूह के लिए अलग-अलग सांख्यिकीय परिणाम मिलते हैं, जैसे df.groupby('शहर')['अंक'].sum() प्रत्येक शहर के कुल अंक लौटाता है। इसके अलावा df.cumsum() क्रमिक योग (cumulative sum) देता है और df.pct_change() प्रतिशत परिवर्तन की गणना करता है, जो वित्तीय डेटा के विश्लेषण में विशेष रूप से उपयोगी है। df.describe() सभी संख्यात्मक स्तंभों का व्यापक सांख्यिकीय सारांश एक साथ प्रस्तुत करता है। इन संकलन विधियों की सहायता से बड़े डेटा सेट से शीघ्रता से अर्थपूर्ण निष्कर्ष निकाले जा सकते हैं। परीक्षा में इन विधियों के आउटपुट का अनुमान लगाने से संबंधित प्रश्न प्रायः पूछे जाते हैं, इसलिए प्रत्येक विधि का अर्थ स्पष्ट रूप से जानना आवश्यक है।
| क्रिया | कोड |
|---|---|
| स्तंभ जोड़ना | df['नया'] = सूची |
| स्तंभ हटाना | del df['कॉलम'] |
| स्तंभ हटाना | df.drop(columns=['कॉलम']) |
| स्थायी हटाना | df.drop(columns=['कॉलम'], inplace=True) |
| क्रिया | कोड |
|---|---|
| पंक्ति जोड़ना | df.loc['नया_index'] = [मान...] |
| पंक्ति हटाना | df.drop('index') |
| मान से सॉर्ट | df.sort_values(by='कॉलम') |
| सूचकांक से सॉर्ट | df.sort_index() |
| अवरोही सॉर्ट | df.sort_values(by='कॉलम', ascending=False) |
| क्रिया | कोड |
|---|---|
| सीरीज़/डेटाफ्रेम जोड़ना | pd.concat([x, y]) |
| स्तंभ अनुसार जोड़ना | pd.concat([x, y], axis=1) |
| आकृति | df.shape |
| डेटाटाइप | df.dtypes |
| संक्षिप्त जानकारी | df.info() |
drop() में inplace भूलना: df.drop(columns=['अंक']) मूल डेटाफ्रेम में परिवर्तन नहीं करता। बिना inplace=True के परिवर्तन स्थायी नहीं होता।df[df['अंक']>=80 & df['अंक']<=90] में & के दोनों ओर की शर्तें कोष्ठक में होनी चाहिए, अन्यथा त्रुटि आती है।& और and में भ्रम: पांडा फ़िल्टरिंग में and का उपयोग नहीं होता, & का उपयोग होता है। and पाइथन की सामान्य बूलियन संक्रिया है।sort_values में by भूलना: sort_values() में by पैरामीटर अनिवार्य है, बिना इसके TypeError आती है।loc से पंक्ति जोड़ना भूलना: पंक्ति जोड़ने के लिए df.loc['नया'] = [...] का उपयोग किया जाता है, न कि सीधे सूची।ascending=False अनिवार्य है।del df['कॉलम'] को स्थायी समझना: del स्थायी रूप से हटाता है, इसलिए बैकअप रखना बुद्धिमानी है।&, |, ~ के सही उपयोग और कोष्ठकों की स्थिति पर ध्यान दें।sort_values(by='कॉलम', ascending=False) का अवरोही रूप याद रखें।concat में axis के मान का अर्थ — 0 पंक्ति, 1 स्तंभ — सदैव स्पष्ट रखें।drop() से हटाने के बाद नया डेटाफ्रेम लौटता है, inplace=True से मूल बदलता है।df.loc और df.iloc का प्रयोग करके पंक्ति जोड़ने के अभ्यास करें।पाइथन पांडा - II में हमने डेटाफ्रेम के प्रबंधन की उन्नत संक्रियाएं सीखीं — स्तंभ और पंक्ति जोड़ना व हटाना, बूलियन फ़िल्टरिंग, सॉर्टिंग, तथा pd.concat() के माध्यम से डेटा संघटन। बूलियन फ़िल्टरिंग वास्तविक डेटा विश्लेषण की कुंजी है। &, |, ~ संचालकों का सही उपयोग और कोष्ठकों का नियम इस अध्याय का प्रमुख केंद्र बिंदु है। इन संक्रियाओं की निपुणता से विद्यार्थी वास्तविक जीवन के डेटा सेटों में आवश्यक जानकारी को सरलता से निकाल सकते हैं। अगले अध्याय में हम डेटा विज़ुअलाइज़ेशन का अध्ययन करेंगे, जिसमें हम डेटा को आरेखों के रूप में प्रदर्शित करना सीखेंगे।