DataFrame की तुलना स्प्रेडशीट या डेटाबेस में रखे गए डेटा सेट से की जा सकती है जिसमें पंक्तियाँ और स्तंभ होते हैं। DataFrame एक 2D ऑब्जेक्ट है।
Ok, 1D और 2D शब्दावली से भ्रमित?
1D (Series) और 2D (DataFrame) के बीच प्रमुख अंतर किसी एक डेटा पॉइंट पर पहुंचने के लिए आवश्यक सूचना बिंदुओं की संख्या है। यदि आप Series का उदाहरण लेते हैं, और एक मान निकालना चाहते हैं, तो आपको केवल एक संदर्भ बिंदु की आवश्यकता होती है यानी पंक्ति इंडेक्स।
तुलना में एक टेबल (DataFrame) के लिए, एक संदर्भ बिंदु डेटा पॉइंट तक पहुंचने के लिए पर्याप्त नहीं है, आपको पंक्ति मान और स्तंभ मान के प्रतिच्छेदन की आवश्यकता होती है।
नीचे दिया गया स्निपेट दिखाता है कि CSV फ़ाइल से पांडा DataFrame कैसे बनाएं।
.read_csv() विधि डिफ़ॉल्ट रूप से एक DataFrame बनाती है। आप kaggle.com से movies डेटासेट डाउनलोड कर सकते हैं movies खोजकर।
\"\"\"Script : Create a Pandas DataFrame from a csv file.\"\"\" import pandas as pd movies_dataset pd read_csv "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv") # 1 print the type of object type(movies_dataset) # 2 print the top 5 records in a tabular format movies_dataset head(5)
| budget | id | original_language | original_title | popularity | release_date | revenue | runtime | status | title | vote_average | vote_count | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 237000000 | 19995 | en | Avatar | 150.437577 | 10/12/2009 | 2787965087 | 162.0 | Released | Avatar | 7.2 | 11800 |
| 1 | 300000000 | 285 | en | Pirates of the Caribbean: At World's End | 139.082615 | 19/05/2007 | 961000000 | 169.0 | Released | Pirates of the Caribbean: At World's End | 6.9 | 4500 |
| 2 | 245000000 | 206647 | en | Spectre | 107.376788 | 26/10/2015 | 880674609 | 148.0 | Released | Spectre | 6.3 | 4466 |
| 3 | 250000000 | 49026 | en | The Dark Knight Rises | 112.312950 | 16/07/2012 | 1084939099 | 165.0 | Released | The Dark Knight Rises | 7.6 | 9106 |
| 4 | 260000000 | 49529 | en | John Carter | 43.926995 | 7/03/2012 | 284139100 | 132.0 | Released | John Carter | 6.1 | 2124 |
2. एकल DataFrame कॉलम चुनना। इंडेक्स ऑपरेटर को कॉलम नाम स्ट्रिंग या लिस्ट के रूप में पास करने पर कॉलम मान या तो Series या DataFrame के रूप में लौटाएगा।
यदि हम कॉलम नाम के साथ एक स्ट्रिंग पास करते हैं, तो आपको Series आउटपुट के रूप में मिलेगा, हालांकि केवल एक कॉलम नाम के साथ लिस्ट पास करने पर DataFrame लौटेगा। हम इसे उदाहरणों के साथ देखेंगे।
# डेटा को series के रूप में चुनें movies_dataset["title"]
0 Avatar 1 Pirates of the Caribbean: At World's End 2 Spectre 3 The Dark Knight Rises 4 John Carter ... 4798 El Mariachi 4799 Newlyweds 4800 Signed, Sealed, Delivered 4801 Shanghai Calling 4802 My Date with Drew Name: title, Length: 4803, dtype: object
# डेटा को DataFrame के रूप में चुनें movies_dataset[["title"]]
| title | |
|---|---|
| 0 | Avatar |
| 1 | Pirates of the Caribbean: At World's End |
| 2 | Spectre |
| 3 | The Dark Knight Rises |
| 4 | John Carter |
| ... | ... |
| 4798 | El Mariachi |
| 4799 | Newlyweds |
| 4800 | Signed, Sealed, Delivered |
| 4801 | Shanghai Calling |
| 4802 | My Date with Drew |
3. एकाधिक DataFrame कॉलम चुनना।
# एकाधिक DataFrame कॉलम movies_dataset[["title","runtime","vote_average","vote_count"]]
| title | runtime | vote_average | vote_count | |
|---|---|---|---|---|
| 0 | Avatar | 162.0 | 7.2 | 11800 |
| 1 | Pirates of the Caribbean: At World's End | 169.0 | 6.9 | 4500 |
| 2 | Spectre | 148.0 | 6.3 | 4466 |
| 3 | The Dark Knight Rises | 165.0 | 7.6 | 9106 |
| 4 | John Carter | 132.0 | 6.1 | 2124 |
| ... | ... | ... | ... | ... |
| 4798 | El Mariachi | 81.0 | 6.6 | 238 |
| 4799 | Newlyweds | 85.0 | 5.9 | 5 |
| 4800 | Signed, Sealed, Delivered | 120.0 | 7.0 | 6 |
| 4801 | Shanghai Calling | 98.0 | 5.7 | 7 |
| 4802 | My Date with Drew | 90.0 | 6.3 | 16 |
कोड पठनीयता समस्याओं से बचने के लिए, मैं हमेशा कॉलम नामों को लिस्ट के रूप में रखने के लिए एक वेरिएबल परिभाषित करने की सलाह देता हूं और कोड में एकाधिक कॉलम नाम निर्दिष्ट करने के बजाय कॉलम नाम का उपयोग करें।
columns=["title","runtime","vote_average","vote_count"]movies_dataset[columns]
| title | runtime | vote_average | vote_count | |
|---|---|---|---|---|
| 0 | Avatar | 162.0 | 7.2 | 11800 |
| 1 | Pirates of the Caribbean: At World's End | 169.0 | 6.9 | 4500 |
| 2 | Spectre | 148.0 | 6.3 | 4466 |
| 3 | The Dark Knight Rises | 165.0 | 7.6 | 9106 |
| 4 | John Carter | 132.0 | 6.1 | 2124 |
| ... | ... | ... | ... | ... |
| 4798 | El Mariachi | 81.0 | 6.6 | 238 |
| 4799 | Newlyweds | 85.0 | 5.9 | 5 |
| 4800 | Signed, Sealed, Delivered | 120.0 | 7.0 | 6 |
| 4801 | Shanghai Calling | 98.0 | 5.7 | 7 |
| 4802 | My Date with Drew | 90.0 | 6.3 | 16 |
4. कॉलम नामों द्वारा DataFrame कॉलम।
.filter() विधि
यह विधि स्ट्रिंग का उपयोग करके कॉलम खोजने और चुनने के लिए काफी आसान है। यह SQL में like %% पैरामीटर की तरह ही काम करता है। याद रखें, .filter() विधि केवल कॉलम नामों का निरीक्षण करके कॉलम चुनती है न कि वास्तविक डेटा मान।
.filter() विधि चयन ऑपरेशन के लिए उपयोग किए जा सकने वाले तीन पैरामीटर्स का समर्थन करती है:
- .like
- .regex
- .items
like पैरामीटर एक स्ट्रिंग लेता है और उन कॉलम नामों को ढूंढने का प्रयास करता है जिनमें कॉलम नाम में कहीं यह स्ट्रिंग होती है।
# उन कॉलम को चुनें जिनका कॉलम नाम "title" जैसा है movies_dataset.filter(like="title").head(5)
| original_title | title | |
|---|---|---|
| 0 | Avatar | Avatar |
| 1 | Pirates of the Caribbean: At World's End | Pirates of the Caribbean: At World's End |
| 2 | Spectre | Spectre |
| 3 | The Dark Knight Rises | The Dark Knight Rises |
| 4 | John Carter | John Carter |
.regex - रेगुलर एक्सप्रेशन का उपयोग करके कॉलम नाम चुनने का अधिक लचीला तरीका
# उन कॉलम को चुनें जो "t" से समाप्त होते हैं movies_dataset.filter(regex=t).head()
| budget | vote_count | |
|---|---|---|
| 0 | 237000000 | 11800 |
| 1 | 300000000 | 4500 |
| 2 | 245000000 | 4466 |
| 3 | 250000000 | 9106 |
| 4 | 260000000 | 2124 |
.items - इंडेक्स ऑपरेटर को कॉलम नाम स्ट्रिंग या लिस्ट के रूप में पास करने का डुप्लिकेट, सिवाय इसके कि KeyError नहीं उठाया जाएगा
डेटा प्रकारों द्वारा DataFrame कॉलम।
.select_dtypes विधि कॉलम डेटा प्रकारों पर काम करती है यदि आप केवल कुछ डेटा प्रकारों को फ़िल्टर और उपयोग करने में रुचि रखते हैं।
फिर से, .select_dtypes विधि अपने include या exclude पैरामीटर्स में एकाधिक डेटा प्रकार (लिस्ट द्वारा) या एकल डेटा प्रकार (स्ट्रिंग के रूप में) स्वीकार करती है और केवल उन दिए गए डेटा प्रकारों वाले कॉलम के साथ एक DataFrame लौटाती है।
.include पैरामीटर निर्दिष्ट डेटा प्रकार/प्रकारों वाले कॉलम को शामिल करता है और .exclude निर्दिष्ट डेटा प्रकार वाले कॉलम को अनदेखा करेगा।
आइए पहले उन डेटा प्रकारों और उन डेटा प्रकारों वाले कॉलम की संख्या देखें
movies_dataset=pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv" movies_dataset.dtypes.value_counts()
object 5 int64 4 float64 3 dtype: int64
a) पांडा DataFrames से पूर्णांक डेटा प्रकार फ़िल्टर करना।
movies_dataset select_dtypes(include="int")head(3)
| 2 |
|---|
| 1 |
| 0 |
b). पांडा DataFrames से पूर्णांक और फ्लोट डेटा प्रकार चुनें।
आप नीचे दिखाए अनुसार एकाधिक डेटा प्रकारों को लिस्ट के रूप में निर्दिष्ट कर सकते हैं।
movies_dataset select_dtypes(include=["int64","float"]).head(3)
| budget | id | popularity | revenue | runtime | vote_average | vote_count | |
|---|---|---|---|---|---|---|---|
| 0 | 237000000 | 19995 | 150.437577 | 2787965087 | 162.0 | 7.2 | 11800 |
| 1 | 300000000 | 285 | 139.082615 | 961000000 | 169.0 | 6.9 | 4500 |
| 2 | 245000000 | 206647 | 107.376788 | 880674609 | 148.0 | 6.3 | 4466 |
c) ठीक है, यदि आप केवल सभी संख्यात्मक डेटा प्रकार चाहते हैं, तो बस number निर्दिष्ट करें
movies_dataset select_dtypes(include=["number"]).head(3)
| budget | id | popularity | revenue | runtime | vote_average | vote_count | |
|---|---|---|---|---|---|---|---|
| 0 | 237000000 | 19995 | 150.437577 | 2787965087 | 162.0 | 7.2 | 11800 |
| 1 | 300000000 | 285 | 139.082615 | 961000000 | 169.0 | 6.9 | 4500 |
| 2 | 245000000 | 206647 | 107.376788 | 880674609 | 148.0 | 6.3 | 4466 |
d). पांडा DataFrames से कुछ डेटा प्रकारों को बाहर करें।
movies_dataset select_dtypes(exclude=["object"]).head(3)
| budget | id | popularity | revenue | runtime | vote_average | vote_count | |
|---|---|---|---|---|---|---|---|
| 0 | 237000000 | 19995 | 150.437577 | 2787965087 | 162.0 | 7.2 | 11800 |
| 1 | 300000000 | 285 | 139.082615 | 961000000 | 169.0 | 6.9 | 4500 |
| 2 | 245000000 | 206647 | 107.376788 | 880674609 | 148.0 | 6.3 | 4466 |
नोट:- स्ट्रिंग डेटा प्रकार से निपटने के लिए नहीं है, पांडा उन्हें ऑब्जेक्ट में बदल देता है, इसलिए यदि आपको अपवाद "TypeError: data type "string" not understood" का सामना करना पड़ता है, तो स्ट्रिंग के बजाय Object का उपयोग करें।