पंडों द्वारा मेरी चीट शीट

एक शिक्षक ने एक बार मुझसे कहा था कि यदि आप किताबों की दुनिया में प्रोग्रामर का एक एनालॉग देखते हैं, तो यह पता चलता है कि प्रोग्रामर पाठ्यपुस्तकों की तरह नहीं हैं, बल्कि सामग्री की तालिका: वे सब कुछ याद नहीं करते हैं, लेकिन वे जानते हैं कि कैसे जल्दी से आपको यह पता लगाना है कि आपको क्या जरूरत है।

कार्यों के विवरण को जल्दी से खोजने की क्षमता प्रोग्रामर को धारा की स्थिति को खोए बिना उत्पादक रूप से काम करने की अनुमति देती है। इसीलिए मैंने यहाँ प्रस्तुत चिट शीट बनाई pandasऔर इसमें शामिल किया जो मैं हर दिन उपयोग करता हूं, वेब एप्लिकेशन और मशीन लर्निंग मॉडल बना रहा हूं। यह सुविधाओं की एक विस्तृत सूची नहीं है , लेकिन इसमें वे फ़ंक्शंस शामिल हैं जिनका मैं अक्सर उपयोग करता हूं, उदाहरण और उन स्थितियों के बारे में मेरी व्याख्याएं जिनमें ये फ़ंक्शंस विशेष रूप से उपयोगी हैं।



pandas

1. काम के लिए तैयारी


यदि आप स्वतंत्र रूप से परीक्षण करना चाहते हैं कि यहां क्या चर्चा होने जा रही है, तो कागल से एनीमे सिफारिशें डेटाबेस डेटासेट डाउनलोड करें । इसे अनज़िप करें और इसे उसी फ़ोल्डर में रखें जहाँ आपका Jupyter नोटबुक स्थित है (बाद में - नोटपैड)।

अब निम्नलिखित कमांड चलाएँ।

import pandas as pd
import numpy as np
anime = pd.read_csv('anime-recommendations-database/anime.csv')
rating = pd.read_csv('anime-recommendations-database/rating.csv')
anime_modified = anime.set_index('name')

उसके बाद, आपको इस सामग्री के निम्नलिखित अनुभागों में जो मैं दिखाऊंगा उसे पुन: प्रस्तुत करने में सक्षम होना चाहिए।

2. डेटा आयात करें


CS CSV डेटा डाउनलोड करें


यहां मैं सीएसवी डेटा को सीधे डेटा फ़्रेम (डेटाफ़्रेम में) में परिवर्तित करने के बारे में बात करना चाहता हूं। सीएसवी प्रारूप में डेटा डाउनलोड करते समय कभी-कभी आपको उनकी एन्कोडिंग निर्दिष्ट करने की आवश्यकता होती है (उदाहरण के लिए, यह ऐसा लग सकता है encoding='ISO-8859–1')। यह पहली चीज़ है जिसे आपको करने की कोशिश करनी चाहिए अगर यह पता चले कि डेटा लोड करने के बाद डेटा फ़्रेम में अपठनीय वर्ण हैं।

anime = pd.read_csv('anime-recommendations-database/anime.csv')


CSV डेटा डाउनलोड किया

गया एक्सेल फ़ाइलों से डेटा लोड करने के लिए एक समान कार्य हैpd.read_excel।

Data मैन्युअल रूप से दर्ज डेटा से एक डेटा फ्रेम बनाएँ


यह उपयोगी हो सकता है जब आपको प्रोग्राम में सरल डेटा को मैन्युअल रूप से दर्ज करने की आवश्यकता होती है। उदाहरण के लिए, यदि आपको डेटा प्रोसेसिंग पाइपलाइन से गुजरने वाले डेटा के परिवर्तनों का मूल्यांकन करने की आवश्यकता है।

df = pd.DataFrame([[1,'Bob', 'Builder'],
                  [2,'Sally', 'Baker'],
                  [3,'Scott', 'Candle Stick Maker']], 
columns=['id','name', 'occupation'])


हस्त प्रविष्टि

। डेटा फ्रेम की नकल करना


डेटा फ़्रेम को कॉपी करना उन स्थितियों में काम आ सकता है, जहाँ आपको इन डेटा में बदलाव करने की आवश्यकता होती है, लेकिन आपको मूल को बचाने की भी आवश्यकता होती है। यदि डेटा फ़्रेम को कॉपी करने की आवश्यकता है, तो उन्हें डाउनलोड करने के तुरंत बाद ऐसा करने की सिफारिश की जाती है।

anime_copy = anime.copy(deep=True)


डेटा फ्रेम की कॉपी

3. डेटा निर्यात


▍ सीएसवी प्रारूप को निर्यात करें


डेटा निर्यात करते समय, उन्हें नोटपैड के समान फ़ोल्डर में सहेजा जाता है। नीचे एक डेटा फ़्रेम की पहली 10 पंक्तियों को सहेजने का एक उदाहरण है, लेकिन वास्तव में क्या सहेजना विशिष्ट कार्य पर निर्भर करता है।

rating[:10].to_csv('saved_ratings.csv', index=False)

आप फ़ंक्शन का उपयोग करके डेटा को एक्सेल फ़ाइलों के रूप में निर्यात कर सकते हैं df.to_excel।

4. डेटा देखें और शोध करें


Data डेटा फ्रेम की शुरुआत या अंत से एन रिकॉर्ड करना


सबसे पहले, nडेटा फ्रेम के पहले तत्वों के आउटपुट के बारे में बात करते हैं । मैं अक्सर नोटबुक में डेटा फ़्रेम की शुरुआत से कई तत्वों का अनुमान लगाता हूं। यह मुझे इस डेटा को इस घटना में आसानी से उपयोग करने की अनुमति देता है कि मैं भूल गया कि डेटा फ्रेम में वास्तव में क्या है। पिछले कुछ तत्वों का निष्कर्ष एक समान भूमिका निभाता है।

anime.head(3)
rating.tail(1)


डेटा फ्रेम की शुरुआत से डेटा


डेटा फ्रेम के अंत से डेटा

Data डेटा फ्रेम में पंक्तियों की संख्या की गिनती


len(),मैं यहाँ जो कार्य दिखाऊँगा, वह शामिल नहीं है pandas। लेकिन यह डेटा फ्रेम की पंक्तियों की संख्या की गिनती के लिए अच्छी तरह से अनुकूल है। इसके काम के परिणामों को एक चर में संग्रहीत किया जा सकता है और उनका उपयोग किया जाता है जहां उनकी आवश्यकता होती है।

len(df)
#=> 3

▍ स्तंभ में अद्वितीय मानों की संख्या बढ़ाना


किसी स्तंभ में अनन्य मानों की संख्या की गणना करने के लिए, आप इस निर्माण का उपयोग कर सकते हैं:

len(ratings['user_id'].unique())

Informationगेटिंग डेटा फ्रेम की जानकारी


डेटा फ़्रेम के बारे में जानकारी में इसके बारे में सामान्य जानकारी शामिल होती है, जैसे हेडर, मानों की संख्या, स्तंभों के डेटा प्रकार।

anime.info()


डेटा फ़्रेम जानकारी - के

समान एक और फ़ंक्शन है। यह केवल स्तंभों के डेटा प्रकारों के बारे में जानकारी प्रदर्शित करता है।df.infodf.dtypes

डेटा फ्रेम के बारे में आंकड़ों का विश्लेषण


डेटा फ़्रेम के बारे में सांख्यिकीय जानकारी जानना उन स्थितियों में बहुत उपयोगी है जहां इसमें बहुत सारे संख्यात्मक मूल्य शामिल हैं। उदाहरण के लिए, किसी कॉलम के औसत, न्यूनतम और अधिकतम मानों को जानने से ratingहमें कुछ जानकारी मिलती है कि डेटा फ़्रेम पूरे रूप में कैसा दिखता है। यहाँ इसी आदेश है:

anime.describe()


डेटा फ्रेम आँकड़े

▍ गणना करें


किसी विशेष स्तंभ में मानों की संख्या की गणना करने के लिए, आप निम्न निर्माण का उपयोग कर सकते हैं:

anime.type.value_counts()


किसी कॉलम में आइटमों की संख्या की गणना करें

5. डेटा फ्रेम से जानकारी निकालना


स्तंभ मानों के आधार पर एक सूची या श्रृंखला वस्तु का निर्माण


यह उन मामलों में उपयोगी हो सकता है जहां आप स्तंभों के मूल्यों को चर में xऔर yमॉडल के प्रशिक्षण के लिए निकालना चाहते हैं । निम्नलिखित आदेश यहां लागू होते हैं:

anime['genre'].tolist()
anime['genre']


एनिमी ['शैली'] के परिणाम। टोलिस्ट () कमांड


Anime ['शैली'] टीम परिणाम

▍ सूचकांक से मूल्यों की सूची बनाना


एक सूचकांक से मूल्यों की सूची प्राप्त करने के बारे में बात करते हैं। कृपया ध्यान दें कि मैंने यहाँ डेटा फ्रेम का उपयोग किया है anime_modified, क्योंकि इसके सूचकांक मूल्य अधिक दिलचस्प लगते हैं।

anime_modified.index.tolist()


टीम के परिणाम

। स्तंभ मानों की सूची बनाना


यहां एक कमांड है जो आपको कॉलम मानों की एक सूची प्राप्त करने की अनुमति देता है:

anime.columns.tolist()


टीम के परिणाम

6. डेटा फ्रेम में डेटा जोड़ना और उन्हें इससे निकालना


On डेटा फ्रेम के लिए एक निर्दिष्ट मान के साथ एक नया कॉलम काटना


कभी-कभी मुझे डेटाफ़्रेम में नए कॉलम जोड़ने पड़ते हैं। उदाहरण के लिए - ऐसे मामलों में जहां मेरे पास दो अलग-अलग डेटा फ़्रेमों में परीक्षण और प्रशिक्षण सेट हैं, और उन्हें संयोजित करने से पहले, मुझे उन्हें चिह्नित करने की आवश्यकता है ताकि बाद में उन्हें प्रतिष्ठित किया जा सके। इसके लिए, निम्नलिखित निर्माण का उपयोग किया जाता है:

anime['train set'] = True

स्तंभों के सबसेट से एक नया डेटा फ़्रेम तैयार करें


यह उपयोगी हो सकता है यदि आप नए डेटा फ़्रेम में एक विशाल डेटा फ़्रेम के कई स्तंभों को सहेजना चाहते हैं, लेकिन आप उन स्तंभों के नाम लिखना नहीं चाहते जिन्हें आप हटाना चाहते हैं।

anime[['name','episodes']]


कमांड परिणाम

Columns निर्दिष्ट कॉलम हटाएं


यदि आपको डेटा फ़्रेम से केवल कुछ कॉलम निकालने की आवश्यकता है, तो यह तकनीक उपयोगी हो सकती है। यदि आपको कई स्तंभों को हटाने की आवश्यकता है, तो यह कार्य काफी थकाऊ हो सकता है, इसलिए यहां मैं पिछले अनुभाग में वर्णित अवसर का उपयोग करना पसंद करता हूं।

anime.drop(['anime_id', 'genre', 'members'], axis=1).head()


टीम के परिणाम

▍ अन्य पंक्तियों से डेटा फ़्रेम तक मानों के योग के साथ एक पंक्ति जोड़ना


इस उदाहरण को प्रदर्शित करने के लिए, हम स्वतंत्र रूप से एक छोटा डेटा फ्रेम बनाएंगे जो काम करने के लिए सुविधाजनक है। यहां सबसे दिलचस्प बात डिज़ाइन है df.sum(axis=0), जो आपको विभिन्न पंक्तियों से मूल्यों का योग प्राप्त करने की अनुमति देता है। 

df = pd.DataFrame([[1,'Bob', 8000],
                  [2,'Sally', 9000],
                  [3,'Scott', 20]], columns=['id','name', 'power level'])
df.append(df.sum(axis=0), ignore_index=True)


आदेश का परिणाम

दृश्य का आदेशdf.sum(axis=1)आपको कॉलम में मानों को योग करने की अनुमति देता है।

एक समान तंत्र औसत मूल्यों की गणना के लिए भी लागू होता है। उदाहरण के लिए -df.mean(axis=0)।

7. डेटा फ्रेम का मेल


Frames दो डेटा फ़्रेम का कॉनटेनटेशन


यह तकनीक उन स्थितियों में लागू होती है जहां एक ही कॉलम के साथ दो डेटा फ़्रेम होते हैं जिन्हें संयोजित करने की आवश्यकता होती है।

इस उदाहरण में, हम पहले डेटा फ्रेम को दो भागों में विभाजित करते हैं, और फिर इन भागों को फिर से जोड़ते हैं:

df1 = anime[0:2]
df2 = anime[2:4]
pd.concat([df1, df2], ignore_index=True)


डेटाफ्रेम df1


डेटाफ्रेम df2


डेटाफ्रेम संयोजन df1 और df2

▍ डेटा फ्रेम मर्ज करें


जिस फ़ंक्शन df.mergeको हम यहां देखेंगे वह बाएं SQL जॉइन के समान है। इसका उपयोग तब किया जाता है जब दो डेटा फ़्रेम को एक निश्चित कॉलम में संयोजित करने की आवश्यकता होती है।

rating.merge(anime, left_on=’anime_id’, right_on=’anime_id’, suffixes=(‘_left’, ‘_right’))


टीम के परिणाम

8. छानना


वांछित सूचकांक मूल्यों के साथ पंक्तियों को बदलना


डेटा फ्रेम के सूचकांक मूल्य anime_modifiedएनीमे के नाम हैं। ध्यान दें कि विशिष्ट कॉलम चुनने के लिए हम इन नामों का उपयोग कैसे करते हैं।

anime_modified.loc[['Haikyuu!! Second Season','Gintama']]


टीम के परिणाम

▍ संख्यात्मक सूचकांकों द्वारा स्ट्रिंग्स को बदलना


यह तकनीक पिछले अनुभाग में वर्णित से अलग है। फ़ंक्शन का उपयोग करते समय, df.ilocपहली पंक्ति को एक सूचकांक सौंपा जाता है 0, दूसरा एक सूचकांक है 1, और इसी तरह। इस तरह के सूचकांक को पंक्तियों को सौंपा जाता है, भले ही डेटा फ्रेम को संशोधित किया गया हो और इसके सूचकांक कॉलम में स्ट्रिंग मान का उपयोग किया जाता है।

निम्नलिखित निर्माण आपको डेटा फ़्रेम की पहली तीन पंक्तियों का चयन करने की अनुमति देता है:

anime_modified.iloc[0:3]


टीम के परिणाम

दिए गए कॉलम मानों द्वारा पंक्तियाँ rowsGetting


स्तंभ के मानों की सूची वाली स्थिति में डेटा फ़्रेम की पंक्तियाँ प्राप्त करने के लिए, आप निम्न कमांड का उपयोग कर सकते हैं:

anime[anime['type'].isin(['TV', 'Movie'])]


आदेश के परिणाम

यदि हम एक ही अर्थ में रुचि रखते हैं - आप इस डिजाइन का उपयोग कर सकते हैं:

anime[anime[‘type’] == 'TV']

Sl डेटा फ्रेम स्लाइस लगाना


यह तकनीक किसी सूची का टुकड़ा पाने के समान है। अर्थात्, हम किसी दिए गए इंडेक्स कॉन्फ़िगरेशन के अनुरूप पंक्तियों वाले डेटा फ़्रेम का एक टुकड़ा प्राप्त करने के बारे में बात कर रहे हैं।

anime[1:3]


टीम के परिणाम

▍ मान से फ़िल्टरिंग


डेटा फ़्रेम से, आप उन पंक्तियों का चयन कर सकते हैं जो निर्दिष्ट स्थिति से मेल खाती हैं। कृपया ध्यान दें कि इस पद्धति का उपयोग करके मौजूदा सूचकांक मानों को संरक्षित किया जाता है।

anime[anime['rating'] > 8]


टीम के परिणाम

9. क्रमबद्ध करें


स्तंभ मान द्वारा डेटा फ़्रेम को सॉर्ट करने के लिए, आप फ़ंक्शन का उपयोग कर सकते हैं df.sort_values:

anime.sort_values('rating', ascending=False)


टीम के परिणाम

10. एकत्रीकरण


▍Df.groupby फ़ंक्शन और रिकॉर्ड की संख्या की गिनती


कॉलम में विभिन्न मूल्यों के साथ रिकॉर्ड की संख्या की गणना कैसे करें:

anime.groupby('type').count()


टीम के परिणाम

विभिन्न तरीकों से df.groupby फ़ंक्शन और स्तंभ एकत्रीकरण


यहां क्या उपयोग किया जाता है, इस पर ध्यान दें reset_index()। अन्यथा, स्तंभ typeएक इंडेक्स कॉलम बन जाता है। ज्यादातर मामलों में, मैं यही करने की सलाह देता हूं।

anime.groupby(["type"]).agg({
  "rating": "sum",
  "episodes": "count",
  "name": "last"
}).reset_index()

एक धुरी तालिका बनाएँ


डेटा फ़्रेम से कुछ डेटा निकालने के लिए, पिवट टेबल से बेहतर कुछ नहीं है। कृपया ध्यान दें कि यहां मैंने डेटा फ़्रेम को गंभीरता से फ़िल्टर किया है, जिससे पिवट टेबल के निर्माण में तेजी आई है।

tmp_df = rating.copy()
tmp_df.sort_values('user_id', ascending=True, inplace=True)
tmp_df = tmp_df[tmp_df.user_id < 10] 
tmp_df = tmp_df[tmp_df.anime_id < 30]
tmp_df = tmp_df[tmp_df.rating != -1]
pd.pivot_table(tmp_df, values='rating', index=['user_id'], columns=['anime_id'], aggfunc=np.sum, fill_value=0)


टीम के परिणाम

11. डेटा की सफाई


Value कुछ अन्य मान के NaN मान वाले कोशिकाओं को लिखें


यहाँ हम वैल्यू 0वाले सेल्स में वैल्यू लिखने के बारे में बात करते हैं NaN। इस उदाहरण में, हम पहले की तरह ही धुरी तालिका बनाते हैं, लेकिन उपयोग के बिना fill_value=0। और फिर फ़ंक्शन का उपयोग करें fillna(0)मूल्यों को बदलने के लिए NaNके साथ 0।

pivot = pd.pivot_table(tmp_df, values='rating', index=['user_id'], columns=['anime_id'], aggfunc=np.sum)
pivot.fillna(0)


तालिका जिसमें NaN मान है


0 के साथ NaN मान को प्रतिस्थापित करने के परिणाम

12. अन्य उपयोगी विशेषताएं


Dataset एक डेटासेट से यादृच्छिक नमूने का नमूना लेना


मैं df.sampleहर बार फ़ंक्शन का उपयोग करता हूं मुझे एक बड़े डेटा फ़्रेम से पंक्तियों का एक छोटा यादृच्छिक सेट प्राप्त करने की आवश्यकता होती है। यदि एक पैरामीटर का उपयोग किया जाता है frac=1, तो फ़ंक्शन आपको मूल डेटा फ़्रेम का एक एनालॉग प्राप्त करने की अनुमति देता है, जिनमें से पंक्तियों को मिश्रित किया जाएगा।

anime.sample(frac=0.25)


टीम के परिणाम

डेटा फ्रेम पंक्तियों का चयन


निम्न निर्माण आपको डेटा फ़्रेम की पंक्तियों पर पुनरावृति करने की अनुमति देता है:

for idx,row in anime[:2].iterrows():
    print(idx, row)


टीम के परिणाम

I लड़ IOPub डेटा दर त्रुटि से अधिक हो गई


यदि आप एक त्रुटि का सामना IOPub data rate exceededकरते हैं, तो जुपिटर नोटबुक शुरू करते समय निम्नलिखित कमांड का उपयोग करने का प्रयास करें:

jupyter notebook — NotebookApp.iopub_data_rate_limit=1.0e10

सारांश


यहां मैंने pandasज्यूपिटर नोटबुक पर्यावरण का उपयोग करने के लिए कुछ उपयोगी ट्रिक्स के बारे में बात की । मुझे उम्मीद है कि मेरी चीट शीट काम में आएगी।

प्रिय पाठकों! क्या कोई ऐसा अवसर है pandasजिसके बिना आप अपने दैनिक कार्य की कल्पना नहीं कर सकते हैं?


All Articles