pandas से गड़बड़ डेटा साफ़ करना
असली टेबल्स में छूटे हुए मान (missing values), टेक्स्ट के रूप में सेव किए गए नंबर, स्पेलिंग में अंतर और डुप्लीकेट पंक्तियाँ होती हैं। इन्हें एक साफ़ क्रम में ठीक करें, और हर बदलाव का रिकॉर्ड रखें।
60 सेकंड में
pandas से गड़बड़ डेटा साफ़ करना
असली टेबल्स में छूटे हुए मान (missing values), टेक्स्ट के रूप में सेव किए गए नंबर, स्पेलिंग में अंतर और डुप्लीकेट पंक्तियाँ होती हैं। इन्हें एक साफ़ क्रम में ठीक करें, और हर बदलाव…
| समस्या | उदाहरण | आमतौर पर किया जाने वाला सुधार |
|---|---|---|
| छूटे हुए मान (Missing values) | खाली सेल, "N/A", "-" | उन्हें सही छूटे हुए मान (NaN) में बदलें, फिर हटाएँ या भरें |
| गलत प्रकार (Wrong type) | टेक्स्ट के रूप में सेव किए गए नंबर: "1,200" | कॉमा हटाएँ, pd.to_numeric से बदलें |
| असंगत टेक्स्ट | "Wheat", " wheat", "WHEAT" | स्पेस हटाएँ और एक ही केस (case) का इस्तेमाल करें |
| डुप्लीकेट | वही पंक्ति दो बार दर्ज की गई | टेक्स्ट ठीक करने के बाद, drop_duplicates() |
| असंभव मान | नेगेटिव वज़न, भविष्य की कोई तारीख | नियमों से जाँचें; ठीक करें या छूटा हुआ मार्क करें |
पहले, देखें
import pandas as pd
# A made-up table with typical problems.
df = pd.DataFrame({
"village": ["Rampur", "rampur ", "Sonpur", "Sonpur", "Kalyani"],
"wells": ["4", "4", "N/A", "N/A", "7"],
"people": ["1,250", "1,250", "980", "980", ""],
})
print(df)
print()
print(df.dtypes) # "object" or "str" means text: the numbers are stored as text
print()
df["village"] = df["village"].str.strip().str.title()
df["wells"] = pd.to_numeric(df["wells"], errors="coerce") # "N/A" becomes NaN
df["people"] = pd.to_numeric(df["people"].str.replace(",", ""), errors="coerce")
print(df)
print()
print("Missing per column:")
print(df.isna().sum())
print("Duplicate rows:", df.duplicated().sum())
print(df.drop_duplicates())errors="coerce" हर उस चीज़ को NaN में बदल देता है जो नंबर नहीं है, ताकि आप उसे गिन सकें और संभाल सकें। ध्यान दें कि "Rampur" और "rampur " केवल टेक्स्ट ठीक होने के बाद ही डुप्लीकेट बनते हैं। क्रम मायने रखता है।एक समझदारी भरा क्रम
- 1
देखें
पहली कुछ पंक्तियाँ,dtypes,isna().sum()और कुछ काउंट्स प्रिंट करें। - 2
टेक्स्ट ठीक करें
स्पेस हटाएँ और कैटेगरी वाले कॉलम में केस एक जैसा करें। - 3
प्रकार (types) ठीक करें
नंबरों और तारीखों को बदलें; कचरे को NaN में बदलें। - 4
डुप्लीकेट हटाएँ
अब जब एक जैसी पंक्तियाँ सच में एक जैसी दिखती हैं। - 5
छूटे हुए मान संभालें
हटाएँ या भरें, और उसका कारण भी लिखकर रखें। - 6
फिर से जाँचें
गिनती, रेंज और कुछ पंक्तियों को खुद देखकर जाँचें।
छूटे हुए मान: हटाएँ या भरें?
- हर खाली जगह को 0 से भरना, जब 0 खुद एक असली मान हो
- किसी भी खाली जगह वाली हर पंक्ति को हटा देना, जिससे ज़्यादातर डेटा खो जाए
- train/test विभाजन से पहले पूरे डेटासेट का इस्तेमाल करके भरना
- यह न बताना कि कितने मान भरे गए
- अगर लेबल ही गायब है, तो पंक्ति हटा दें
- किसी नंबर को मिलती-जुलती पंक्तियों के मीडियन से भरें, और इसे नोट करें
- कोई भी भराई केवल ट्रेनिंग डेटा पर फ़िट करें (पाइपलाइन में scikit-learn का
SimpleImputer) - बदलावों की गिनती रखें, या भरे गए मानों को मार्क करने वाला एक कॉलम रखें
और देखें और पढ़ें
लैब
फसल की एक साफ़ टेबल: सुव्यवस्थित फसलों के नाम, असली नंबर, कोई डुप्लीकेट पंक्ति नहीं और कोई खाली जगह नहीं, जिसे pandas के चरणों के एक स्पष्ट क्रम से बनाया गया है।
समस्या
शुरुआती कोड में फसल के रिकॉर्ड की एक छोटी सी काल्पनिक टेबल है। इसे इसी क्रम में, clean नाम के एक नए DataFrame में साफ़ करें:
- फसलों के नाम: स्पेस हटाएँ और उन्हें छोटे अक्षरों (lower case) में करें (ताकि " Wheat" बन जाए "wheat")।
harvest_kg: कॉमा हटाएँ और नंबरों में बदलें। "N/A" और खाली सेल NaN बनने चाहिए।- बिल्कुल एक जैसी डुप्लीकेट पंक्तियाँ हटाएँ।
- हर छूटे हुए
harvest_kgको उसी फसल के मीडियन से भरें।
फिर clean प्रिंट करें, कितनी पंक्तियाँ हटाई गईं, कितने मान भरे गए, और प्रति फसल कुल पैदावार प्रिंट करें।
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1फार्म 107 एक ही पैदावार के साथ दो बार दिखता है। आप कैसे बता सकते हैं कि यह टाइपिंग की गलती है या दो असली फसलें?दिखाएं
सिर्फ़ डेटा से आप पक्के तौर पर नहीं कह सकते। तारीख, मौसम या खेत का कोई कॉलम देखें: दो अलग-अलग मौसम दो असली फसलें होंगी। अगर ऐसा कुछ नहीं है, तो डेटा इकट्ठा करने वाले लोगों से पूछें। अपने फ़ैसले को रिकॉर्ड करें, क्योंकि यह कुल योग को बदल देता है।
Q2यहाँ <em>सभी</em> फसलों के मीडियन का इस्तेमाल करके छूटे हुए मान भरना एक खराब चुनाव क्यों होगा?दिखाएं
इस काल्पनिक टेबल में चावल की पैदावार मक्के की पैदावार से बहुत ज़्यादा है। सभी फसलों का मीडियन छूटे हुए चावल वाले फार्म को बहुत कम और छूटे हुए मक्के वाले फार्म को बहुत ज़्यादा दे देगा। एक ही फसल के अंदर भरने से ग्रुप्स के बीच का साफ़ फ़र्क बना रहता है।
अक्सर पूछे जाने वाले सवाल
क्या मुझे स्प्रेडशीट में हाथ से डेटा ठीक करना चाहिए?
जल्दी से एक नज़र देखने के लिए, शायद हाँ। किसी भी ऐसी चीज़ के लिए जिसे आप दोबारा इस्तेमाल करेंगे, उसे कोड में करें। कोड दोबारा चलाया जा सकता है, उसकी समीक्षा की जा सकती है, और वह बिना बताए मूल डेटा को नहीं बदलता।
डुप्लीकेट असल में डुप्लीकेट कब नहीं होते?
बिक्री की दो एक जैसी पंक्तियाँ एक ही चीज़ की दो असली बिक्री हो सकती हैं। हटाने से पहले, जाँच लें कि क्या आपके डेटा में कोई आईडी या समय है जो असली दोहराव और कॉपी करने की गलतियों में फ़र्क बताता हो।
pandas में NaN और None में क्या अंतर है?
दोनों का मतलब छूटा हुआ (missing) है। नंबर वाले कॉलम में pandas NaN का इस्तेमाल करता है। isna() दोनों को ढूँढ लेता है।
मैं हर ग्रुप के मीडियन से कैसे भरूँ?
हर पंक्ति के ग्रुप का मीडियन पाने के लिए df.groupby("crop")["kg"].transform("median") का इस्तेमाल करें, फिर इससे fillna करें। लैब इसका इस्तेमाल करती है।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।