ailiteracynepal 🇳🇵
पाठ आकार

अध्याय ३ · खण्ड II · 30 मिनेट

pandas: तालिका लोड गर्ने र अन्वेषण

pandas ले अध्याय 2 को शब्दकोश-को-सूची आकारलाई छिटो इन्जिन र मित्रवत् व्याकरण दिन्छ। Python मा झन्डै हरेक कार्यरत डाटा-व्यक्तिले तालिकालाई यसैमार्फत छुन्छन्।

अध्याय 2 मा तपाईंले CSV लाई शब्दकोशहरूको सूचीमा पढ्नुभयो, त्यसमा लूप दिनुभयो, र स्तम्भ जोड्नुभयो। त्यो ठीक थियो, र इमानदार काम थियो — तपाईंले प्रत्येक चरण देख्नुभयो। अब बार्‍ह स्तम्भ भएको एक वर्षको NEPSE डाटामा त्यही गर्ने कल्पना गर्नुहोस्। लूप संस्करण लेख्न झमेलापूर्ण र चलाउन ढिलो हुन्छ। pandas ले उही काम एक वा दुई लाइनमा, छिटो, र कम टाइप गरेर गर्ने पुस्तकालय हो।

pandas स्थापना

टर्मिनलमा, परियोजना फोल्डरबाट:

pip install pandas

नोटबुकमा:

!pip install pandas

संयम भनेको pd मा आयात गर्ने हो:

import pandas as pd
print(pd.__version__)

CSV एकै लाइनमा पढ्ने

अध्याय 2 को data/prices.csv सम्झनुहोस्:

date,close
2026-06-23,2105.4
2026-06-24,2128.9
2026-06-25,2117.3
2026-06-26,2134.7

अध्याय 2 मा तपाईंले यो पढ्न र मूल्यलाई दशमलवमा बदल्न आधा स्क्रिनको कोड लेख्नुभएको थियो। pandas मा:

import pandas as pd

prices = pd.read_csv("data/prices.csv")
print(prices)

बस यति नै। pd.read_csv ले फाइल पढ्छ, पहिलो पङ्क्तिलाई स्तम्भ नामका रूपमा लिन्छ, र प्रत्येक स्तम्भको डाटा प्रकार स्वचालित रूपमा पत्ता लगाउँछ। नतिजा — pricesDataFrame हो, pandas को तालिका प्रकार।

प्रिन्ट गर्नुहोस्:

         date   close
0  2026-06-23  2105.4
1  2026-06-24  2128.9
2  2026-06-25  2117.3
3  2026-06-26  2134.7

बायाँको 0, 1, 2, 3 स्तम्भ सूचकाङ्क हो — हरेक पङ्क्तिको स्थानगत लेबल। पूर्वनिर्धारित रूपमा यो केवल 0, 1, 2, ... हुन्छ; पछि तपाईंले मिति स्तम्भलाई सूचकाङ्क बनाउन सक्नुहुन्छ, जुन समय-शृङ्खलाका लागि प्रायः चाहिने हुन्छ।

पहिलो घण्टामै थाहा पाउनुपर्ने चार फङ्क्सन

नयाँ डाटासेटको झन्डै हरेक अन्वेषण यिनैबाट सुरु हुन्छ:

prices.head()        # पहिलो 5 पङ्क्ति
prices.tail()        # पछिल्ला 5 पङ्क्ति
prices.shape         # (पङ्क्ति, स्तम्भ) — जस्तै (4, 2)
prices.describe()    # सङ्ख्यात्मक स्तम्भहरूको सारांश तथ्याङ्क

describe() ले हरेक सङ्ख्यात्मक स्तम्भका लागि गन्ती, औसत, मानक विचलन, न्यूनतम, अधिकतम, र चतुर्थांश दिन्छ। तपाईंले कहिल्यै नदेखेको डाटासेटको स्वाद पाउने सबैभन्दा छिटो तरिका यही हो।

स्तम्भ-तहको निरीक्षणका लागि दुई थप:

prices.columns       # Index(['date', 'close'], ...) — स्तम्भ नाम
prices.dtypes        # हरेक स्तम्भको डाटा प्रकार

स्तम्भहरूसँग काम गर्ने

DataFrame को स्तम्भलाई Series भनिन्छ। तपाईंले नामले पहुँच गर्नुहुन्छ:

prices["close"]            # Series का रूपमा close स्तम्भ
prices["close"].mean()     # 2121.575
prices["close"].max()      # 2134.7
prices["close"] * 1.05     # हरेक मूल्यलाई 1.05 ले गुणन

Series लगभग 1D NumPy एरे जस्तै व्यवहार गर्छ — पछिल्लो खण्डका अधिकांश सञ्चालन यहाँ चल्छन्। फरक यो हो कि Series सँग सूचकाङ्क (लेबल) टाँसिएको हुन्छ।

असाइनमेन्टले नयाँ स्तम्भ पनि थप्न सक्नुहुन्छ:

prices["close_npr_lakh"] = prices["close"] / 100000

यसले विद्यमानबाट निकालिएको नयाँ स्तम्भ थप्छ। नयाँ स्तम्भको हरेक पङ्क्ति एकैचोटि गणना हुन्छ — लूप आवश्यक छैन। NumPy को भेक्टराइजेसन विचारलाई बिनै सोच्नु प्रयोग गर्दै हुनुहुन्छ।

पङ्क्ति फिल्टर

NumPy को बुलियन-मास्क विचारको pandas संस्करण:

prices[prices["close"] > 2120]

यसले close मूल्य 2120 भन्दा माथि भएका पङ्क्ति मात्र भएको नयाँ DataFrame फिर्ता दिन्छ। हाम्रो सानो उदाहरणमा दुई दिन। उही ढाँचा जुनसुकै शर्तका लागि चल्छ:

prices[prices["date"] >= "2026-06-25"]
prices[(prices["close"] > 2100) & (prices["close"] < 2125)]

नोट: सर्तहरू &| ले जोड्नुहोस् (andor होइन), र प्रत्येक सर्तलाई कोष्ठकमा बेर्नुहोस्। यो pandas का साना झमेलामध्ये एक हो — एक पटक डढ्नुहोस्, सधैंका लागि सम्झिन्छ।

groupby: सबैभन्दा उपयोगी सञ्चालन

यदि कुनै एक pandas सञ्चालन तपाईंले बाँकी जीवनभर हरेक हप्ता प्रयोग गर्नुहुनेछ भने, त्यो groupby हो। कारोबार तालिकाको कल्पना गर्नुहोस्:

import pandas as pd

transactions = pd.DataFrame([
    {"vendor": "Khalti",  "amount": 5000, "date": "2026-06-25"},
    {"vendor": "eSewa",   "amount": 1200, "date": "2026-06-25"},
    {"vendor": "Khalti",  "amount":  450, "date": "2026-06-26"},
    {"vendor": "FonePay", "amount":  900, "date": "2026-06-26"},
])

प्रति विक्रेता रकमको योग निकाल्न:

transactions.groupby("vendor")["amount"].sum()

नतिजा:

vendor
Khalti    5450
eSewa     1200
FonePay    900
Name: amount, dtype: int64

शृङ्खलालाई बायाँदेखि दायाँ पढ्नुहोस्: तालिका लिनुहोस्, vendor को मानअनुसार समूहमा बाँड्नुहोस्, अनि हरेक समूहभित्र amount स्तम्भ लिनुहोस् र जोड्नुहोस्। तीन लाइनको मनसाय एउटै लाइनमा। अध्याय 2 को संस्करण (लूपभित्र if भएको फङ्क्सन) 12 लाइनको थियो। pandas संस्करण एउटै।

धेरै स्तम्भले समूहीकरण गर्न, र अरू सारांश (mean(), count(), max()) लागू गर्न पनि सकिन्छ:

transactions.groupby(["vendor", "date"])["amount"].sum()
transactions.groupby("vendor")["amount"].mean()
transactions.groupby("vendor")["amount"].count()

DataFrame लाई डिस्कमा फिर्ता बचाउने

तपाईं झन्डै सधैं नतिजा कतै लेख्न चाहनुहुनेछ। pandas ले रिडरसँगै राइटर पनि मिलाउँछ:

prices.to_csv("data/prices_out.csv", index=False)
prices.to_json("data/prices_out.json", orient="records", indent=2)

index=False ले अप्रत्यक्ष 0, 1, 2, ... सूचकाङ्कलाई बेकामको स्तम्भका रूपमा लेख्नबाट रोक्छ। orient="records" ले JSON लाई शब्दकोशहरूको सूची (अध्याय 2 को आकार) का रूपमा लेख्छ, जुन झन्डै सधैं तपाईंलाई चाहिने हुन्छ।

आफ्नो बुझाइ जाँच्नुहोस्

Quick check

DataFrame `sales` मा 'district' र 'amount' स्तम्भ छन्। कुन एक-लाइनरले प्रति जिल्ला कुल बिक्री दिन्छ?

Quick check

तपाईंले `prices[prices['close'] > 2100 and prices['close'] < 2125]` लेख्नुभयो र pandas ले एरेको सत्य मानबारे ValueError फ्याँक्यो। उपचार के हो?

अब के आउँछ

DataFrame मा सङ्ख्या उपयोगी छन्, तर मानिसले तालिकाभन्दा चित्र छिटो पढ्छन्। अर्को खण्डमा हामी matplotlib प्रयोग गरेर गणना गर्दै आएका मूल्यहरू कोर्छौं — लाइन चार्ट, बार चार्ट, स्क्याटर प्लट। एक पटक डाटा देख्न सक्नुभयो भने, वास्तविक डाटासेटका आधा बग आफै देखिन्छन्।