मशीन लर्निंग के बुनियादी सिद्धांतमध्यमपाठ 1176 मिनट का पाठ

pandas से गड़बड़ डेटा साफ़ करना

असली टेबल्स में छूटे हुए मान (missing values), टेक्स्ट के रूप में सेव किए गए नंबर, स्पेलिंग में अंतर और डुप्लीकेट पंक्तियाँ होती हैं। इन्हें एक साफ़ क्रम में ठीक करें, और हर बदलाव का रिकॉर्ड रखें।

पाठ वीडियो में

60 सेकंड में

pandas से गड़बड़ डेटा साफ़ करना

असली टेबल्स में छूटे हुए मान (missing values), टेक्स्ट के रूप में सेव किए गए नंबर, स्पेलिंग में अंतर और डुप्लीकेट पंक्तियाँ होती हैं। इन्हें एक साफ़ क्रम में ठीक करें, और हर बदलाव…

1/5
आसान शब्दों में
दाल पकाने से पहले, आप उसमें से कंकड़ चुनते हैं और दाल धोते हैं। यह कदम किसी को दिखता नहीं है, लेकिन अगर आप इसे छोड़ दें, तो पूरा खाना खराब हो जाता है। डेटा साफ़ करना भी बिल्कुल वैसा ही है: मॉडल के देखने से पहले किया जाने वाला धीमा, सावधानी भरा काम, और यही तय करता है कि नतीजा कितना अच्छा हो सकता है।
लोगों द्वारा टाइप किया गया, फ़ॉर्म से कॉपी किया गया, या कई स्रोतों से जोड़ा गया डेटा लगभग कभी भी साफ़ नहीं होता। आम समस्याएँ:
समस्याउदाहरणआमतौर पर किया जाने वाला सुधार
छूटे हुए मान (Missing values)खाली सेल, "N/A", "-"उन्हें सही छूटे हुए मान (NaN) में बदलें, फिर हटाएँ या भरें
गलत प्रकार (Wrong type)टेक्स्ट के रूप में सेव किए गए नंबर: "1,200"कॉमा हटाएँ, pd.to_numeric से बदलें
असंगत टेक्स्ट"Wheat", " wheat", "WHEAT"स्पेस हटाएँ और एक ही केस (case) का इस्तेमाल करें
डुप्लीकेटवही पंक्ति दो बार दर्ज की गईटेक्स्ट ठीक करने के बाद, drop_duplicates()
असंभव माननेगेटिव वज़न, भविष्य की कोई तारीखनियमों से जाँचें; ठीक करें या छूटा हुआ मार्क करें

पहले, देखें

Python: inspecting a small messy tablepython
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. 1

    देखें

    पहली कुछ पंक्तियाँ, dtypes, isna().sum() और कुछ काउंट्स प्रिंट करें।
  2. 2

    टेक्स्ट ठीक करें

    स्पेस हटाएँ और कैटेगरी वाले कॉलम में केस एक जैसा करें।
  3. 3

    प्रकार (types) ठीक करें

    नंबरों और तारीखों को बदलें; कचरे को NaN में बदलें।
  4. 4

    डुप्लीकेट हटाएँ

    अब जब एक जैसी पंक्तियाँ सच में एक जैसी दिखती हैं।
  5. 5

    छूटे हुए मान संभालें

    हटाएँ या भरें, और उसका कारण भी लिखकर रखें।
  6. 6

    फिर से जाँचें

    गिनती, रेंज और कुछ पंक्तियों को खुद देखकर जाँचें।

छूटे हुए मान: हटाएँ या भरें?

जोखिम भरी आदतें
  • हर खाली जगह को 0 से भरना, जब 0 खुद एक असली मान हो
  • किसी भी खाली जगह वाली हर पंक्ति को हटा देना, जिससे ज़्यादातर डेटा खो जाए
  • train/test विभाजन से पहले पूरे डेटासेट का इस्तेमाल करके भरना
  • यह न बताना कि कितने मान भरे गए
बेहतर आदतें
  • अगर लेबल ही गायब है, तो पंक्ति हटा दें
  • किसी नंबर को मिलती-जुलती पंक्तियों के मीडियन से भरें, और इसे नोट करें
  • कोई भी भराई केवल ट्रेनिंग डेटा पर फ़िट करें (पाइपलाइन में scikit-learn का SimpleImputer)
  • बदलावों की गिनती रखें, या भरे गए मानों को मार्क करने वाला एक कॉलम रखें
भरने के लिए मीन (औसत) की तुलना में मीडियन (बीच का मान) अक्सर ज़्यादा सुरक्षित होता है, क्योंकि कोई एक बहुत बड़ा या छोटा मान इसे ज़्यादा नहीं खींचता।
सावधान रहें
छूटे हुए मान अक्सर अचानक या बिना वजह नहीं होते। अगर ज़्यादातर एक ही गाँव का वज़न गायब है, क्योंकि उनकी तौलने वाली मशीन खराब थी, तो यह आपको कुछ बताता है। भरने से पहले पूछें कि मान क्यों गायब है।
नोट
हमेशा मूल (raw) फ़ाइल को बिना छुए रखें और साफ़-सफ़ाई कोड में करें। फिर कोई भी इसे दोबारा चलाकर हर कदम की जाँच कर सकता है। यह कदम 7 · डेटा ही उत्पाद है जैसा ही विचार है: डेटा का काम अक्सर मॉडल से ज़्यादा मायने रखता है।
यह आज़माएँ। कोड में, एक छठी पंक्ति जोड़ें जो कल्याणी को बिल्कुल दोहराती हो। इसे चलाएँ। क्या यह डुप्लीकेट के रूप में पकड़ी जाती है?

और देखें और पढ़ें

लैब

फसल की एक साफ़ टेबल: सुव्यवस्थित फसलों के नाम, असली नंबर, कोई डुप्लीकेट पंक्ति नहीं और कोई खाली जगह नहीं, जिसे pandas के चरणों के एक स्पष्ट क्रम से बनाया गया है।

~25 min

समस्या

शुरुआती कोड में फसल के रिकॉर्ड की एक छोटी सी काल्पनिक टेबल है। इसे इसी क्रम में, clean नाम के एक नए DataFrame में साफ़ करें:

  1. फसलों के नाम: स्पेस हटाएँ और उन्हें छोटे अक्षरों (lower case) में करें (ताकि " Wheat" बन जाए "wheat")।
  2. harvest_kg: कॉमा हटाएँ और नंबरों में बदलें। "N/A" और खाली सेल NaN बनने चाहिए।
  3. बिल्कुल एक जैसी डुप्लीकेट पंक्तियाँ हटाएँ।
  4. हर छूटे हुए 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%)।

टेस्ट देने और अपनी प्रोग्रेस सेव करने के लिए साइन इन करें