शुरुआत से Pythonशुरुआतीपाठ 1067 मिनट का पाठ

डेटा फ़ाइलों के साथ काम करना

ज़्यादातर असली डेटा टेबल के रूप में आता है: मार्क्स लिस्ट, टाइम-टेबल, प्राइस लिस्ट। Python के csv मॉड्यूल से CSV डेटा पढ़ना सीखें और उससे टोटल और ऐवरेज निकालना सीखें।

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

60 सेकंड में

डेटा फ़ाइलों के साथ काम करना

ज़्यादातर असली डेटा टेबल के रूप में आता है: मार्क्स लिस्ट, टाइम-टेबल, प्राइस लिस्ट। Python के csv मॉड्यूल से CSV डेटा पढ़ना सीखें और उससे टोटल और ऐवरेज निकालना सीखें।

1/4
आसान शब्दों में
क्लास रजिस्टर में पंक्तियाँ (rows) और कॉलम होते हैं: हर छात्र के लिए एक पंक्ति, हर विषय के लिए एक कॉलम। CSV फ़ाइल वही टेबल होती है जिसे सादे टेक्स्ट के रूप में सेव किया जाता है, जिसमें कॉलम के बीच कॉमा (अल्पविराम) होते हैं। Python इसे पढ़ सकता है और आपके लिए जोड़-घटाव कर सकता है, चाहे हज़ारों पंक्तियाँ ही क्यों न हों।

एक CSV फ़ाइल कैसी दिखती है

CSV का मतलब है comma-separated values (कॉमा से अलग किए गए मान)। पहली लाइन आम तौर पर header होती है: कॉलम के नाम। इसके बाद की हर लाइन एक पंक्ति (row) होती है। स्प्रेडशीट ऐप्स किसी शीट को CSV के रूप में सेव कर सकते हैं, और कई वेबसाइटें आपको इस तरह से डेटा डाउनलोड करने देती हैं।
A small CSV of markstext
name,maths,science,english
Asha,78,85,90
Ravi,64,72,58
Imran,91,88,76

यहाँ कोई फ़ाइल नहीं है? StringIO का उपयोग करें

इस कोर्स में ब्राउज़र का रनर आपके कंप्यूटर से फ़ाइलें नहीं खोल सकता। इसलिए हम CSV टेक्स्ट को एक स्ट्रिंग में डालते हैं, और उसे io.StringIO से रैप करते हैं। इससे वह स्ट्रिंग खुली हुई फ़ाइल की तरह काम करने लगती है। अपने कंप्यूटर पर आप इसके बजाय open("marks.csv") का उपयोग करेंगे, और बाकी कोड वैसा ही रहेगा।

csv.DictReader से पंक्तियों को पढ़ना

csv मॉड्यूल Python के साथ ही आता है। csv.DictReader हेडर को पढ़ता है, फिर आपको हर पंक्ति एक डिक्शनरी के रूप में देता है, जिसमें कॉलम के नाम कीज़ (keys) के रूप में होते हैं।
Python: read marks from CSV textpython
import csv
import io

data = """name,maths,science,english
Asha,78,85,90
Ravi,64,72,58
Imran,91,88,76"""

reader = csv.DictReader(io.StringIO(data))
for row in reader:
    print(row["name"], "scored", row["maths"], "in maths")
सावधान रहें
CSV से पढ़ी गई हर चीज़ टेक्स्ट होती है, नंबर भी। row["maths"] का मान "78" होता है, न कि 78। जोड़ने या तुलना करने से पहले int() या float() से बदल लें, वरना आपको TypeError मिलेगा, या टेक्स्ट आपस में चिपक जाएगा जैसे "7864"।

पंक्तियों से गणना करना

Python: class average in mathspython
import csv
import io

data = """name,maths,science,english
Asha,78,85,90
Ravi,64,72,58
Imran,91,88,76"""

total = 0
count = 0
for row in csv.DictReader(io.StringIO(data)):
    total += int(row["maths"])
    count += 1
print(f"Maths average: {total / count:.1f}")

ट्रेन का समय: घंटों और मिनटों के साथ काम करना

06:10 जैसा समय भी टेक्स्ट ही होता है। एक आसान तरकीब: इन्हें आधी रात के बाद के मिनटों में बदल लें, फिर घटाएँ। यह काल्पनिक टाइम-टेबल दिखाता है कि यह कैसे किया जाता है।
Python: journey times from a timetablepython
import csv
import io

timetable = """train,departs,arrives
Morning Express,06:10,09:45
Coastal Passenger,07:30,12:05
Evening Mail,17:20,21:00"""

def to_minutes(hhmm):
    hours, minutes = hhmm.split(":")
    return int(hours) * 60 + int(minutes)

for row in csv.DictReader(io.StringIO(timetable)):
    mins = to_minutes(row["arrives"]) - to_minutes(row["departs"])
    print(f"{row['train']}: {mins // 60} h {mins % 60} min")
यह आसान वर्शन मानकर चलता है कि हर ट्रेन उसी दिन पहुँचती है जिस दिन वह चलती है। आधी रात के बाद तक चलने वाली ट्रेन के लिए एक अतिरिक्त नियम की ज़रूरत होगी। ऐसी सीमाओं को पहचानना अच्छे प्रोग्रामिंग का हिस्सा है।

किसी भी डेटा टास्क के लिए सामान्य कदम

  1. 1

    डेटा को देखें

    कॉलम क्या हैं? क्या कोई खाली या अजीब मान हैं?
  2. 2

    इसे पढ़ें

    csv.DictReader हर पंक्ति के लिए एक डिक्शनरी देता है।
  3. 3

    कन्वर्ट करें

    नंबर वाले टेक्स्ट को int या float में बदलें।
  4. 4

    गणना करें

    टोटल, ऐवरेज, सबसे बड़ा, गिनती: लूप्स, लिस्ट और डिक्शनरी का उपयोग करके।
  5. 5

    जवाब जाँचें

    एक पंक्ति का हिसाब हाथ से लगाएँ और तुलना करें।

यह आगे कहाँ ले जाता है

अब आपने डेटा के काम के लिए ज़रूरी हर बुनियादी चीज़ का इस्तेमाल कर लिया है: वेरिएबल्स, निर्णय (decisions), लूप्स, लिस्ट, डिक्शनरी, फ़ंक्शन्स और टेबल पढ़ना। मशीन लर्निंग बिल्कुल यहीं से शुरू होती है: उदाहरणों की एक टेबल, पंक्ति दर पंक्ति पढ़ी गई, नंबरों में बदली गई। जब आप तैयार हों, तो मशीन लर्निंग के मूल सिद्धांत (Machine learning fundamentals) ट्रैक के साथ आगे बढ़ें, जहाँ आप कंप्यूटर को भविष्यवाणियाँ करना सिखाने के लिए ऐसी ही टेबल्स का उपयोग करेंगे। वहाँ आप pandas से भी मिलेंगे, एक ऐसी लाइब्रेरी जो एक ही लाइन में किसी CSV को टेबल के रूप में पढ़ लेती है।
इसे आज़माएँ। मार्क्स वाली CSV में चौथा छात्र जोड़ें और मैथ्स का ऐवरेज फिर से निकालें। फिर साइंस का ऐवरेज निकालने के लिए कोड बदलें। बहुत बढ़िया: आपने अभी-अभी असली डेटा एनालिसिस किया है! 🎉

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

लैब

दो फ़ंक्शन्स जो मार्क्स CSV को पढ़ते हैं और हर छात्र का टोटल और किसी भी विषय का ऐवरेज देते हैं।

~15 min

समस्या

दोनों फ़ंक्शन्स पूरे करें। हर फ़ंक्शन marks_csv जैसा CSV टेक्स्ट लेता है (एक name कॉलम, फिर हर विषय के लिए एक कॉलम):

  1. totals(csv_text) सभी विषयों में हर छात्र के टोटल की एक डिक्शनरी लौटाता है, उदाहरण के लिए {"Asha": 253, …}। सलाह: हर पंक्ति में, name को छोड़कर हर कॉलम को जोड़ें, और हर मान को int() से कन्वर्ट करें।
  2. subject_average(csv_text, subject) किसी एक विषय, जैसे "maths", के लिए पूरी क्लास का ऐवरेज एक नंबर के रूप में लौटाता है।

आपके फ़ंक्शन्स इस बनावट की किसी भी CSV के लिए काम करने चाहिए, भले ही उसमें अलग विषय हों या ज़्यादा छात्र हों। Run दबाएँ, हाथ से एक जवाब जाँचें, फिर Check दबाएँ। इस ट्रैक को पूरा करने पर बधाई! 🎉

प्रैक्टिस लैब

कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।

आउटपुट

कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।

आपका काम तब पूरा होगा जब

कठिन सवाल

उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।

Q1आपके दोस्त का कोड <code>"788590"</code> जैसे टोटल दे रहा है। क्या गड़बड़ हुई, और आप इसे कैसे ठीक करेंगे?दिखाएं

उन्होंने मानों को टेक्स्ट के रूप में जोड़ा, इसलिए + ने स्ट्रिंग्स को आपस में जोड़ दिया। CSV से आने वाला हर मान एक स्ट्रिंग होता है। पहले हर एक को कन्वर्ट करें: total += int(row[subject])।

Q2एक छात्र के साइंस के मार्क्स छूटे हुए हैं (एक खाली सेल)। subject_average को क्या करना चाहिए, और इसे सिर्फ़ 0 क्यों नहीं मान लेना चाहिए?दिखाएं

छूटे हुए मार्क्स को 0 मानने से ऐवरेज गलत तरीके से नीचे गिर जाएगा, जैसे कि छात्र ने कुछ भी स्कोर नहीं किया हो। एक बेहतर नियम यह है कि खाली सेल को छोड़ दिया जाए: सिर्फ़ असली मार्क्स को जोड़ें और जितने असली मार्क्स थे उससे भाग दें। आप जो भी नियम चुनें, उसे लिख लें, क्योंकि इससे नतीजा बदल जाता है।

जारी रखने के लिए कृपया साइन इन करें।

अक्सर पूछे जाने वाले सवाल

अगर CSV के किसी मान में अंदर ही कॉमा हो, जैसे कोई पता (एड्रेस)?

उचित CSV ऐसे मानों को डबल कोट्स के अंदर रखती है: "12, MG Road"। csv मॉड्यूल इसे अपने आप संभाल लेता है। अपने आप हर लाइन को कॉमा पर बाँटने (split करने) के बजाय इसका उपयोग करने का यह एक कारण है।

csv.reader और csv.DictReader में क्या अंतर है?

csv.reader हर पंक्ति को एक लिस्ट के रूप में देता है, इसलिए आप पोज़ीशन का उपयोग करते हैं: row[1]। csv.DictReader हर पंक्ति को एक डिक्शनरी के रूप में देता है, इसलिए आप नामों का उपयोग करते हैं: row["maths"]। नामों को पढ़ना आसान होता है और अगर कॉलम इधर-उधर हो जाएँ तो भी कोड नहीं बिगड़ता।

मैं खाली सेल को कैसे सँभालूँ?

एक खाली सेल खाली स्ट्रिंग "" के रूप में आता है, और int("") एक एरर देता है। पहले जाँचें, उदाहरण के लिए if row["maths"] != "":, और तय करें कि सही नियम क्या है: इसे छोड़ दें, या इसे मिसिंग (अनुपस्थित) मानें। इसे चुपचाप 0 न मान लें जब तक कि वाकई ऐसा करना सही न हो।

क्या मैं Excel फ़ाइलों को भी इसी तरह पढ़ सकता हूँ?

csv मॉड्यूल से नहीं। सबसे आसान तरीका है कि स्प्रेडशीट ऐप से शीट को CSV के रूप में सेव कर लें। pandas जैसी लाइब्रेरी सीधे Excel फ़ाइलें पढ़ सकती हैं, लेकिन उसके लिए अतिरिक्त पैकेज चाहिए होते हैं।

पाठ का टेस्ट

5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।

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