Home › Lectures › Data Analysis

🐼 পান্ডাস দিয়ে ডেটা ম্যানিপুলেশন · Pandas

টেবিল ডেটা পরিষ্কার, রূপান্তর ও বিশ্লেষণের প্রধান টুল।

The main tool to clean, reshape and analyse tabular data.

📅 ২. ডেটা বিশ্লেষণ⏳ ~3 সপ্তাহ📘 10 টপিক🧩 30 সাব-টপিক🎬 0 ভিডিও💻 রানযোগ্য কোড

🎯 যা শিখবেন / Outcomes

Load, filter, group, merge and reshape data

🧰 টুলস / Tools

pandas, Jupyter

🏁 প্রজেক্ট / Capstone

Bangladesh district-level data analysis

📌 পূর্বশর্ত / Prerequisites

🔢 NumPy

📅

সাপ্তাহিক পরিকল্পনা · Weekly plan

~২ ঘণ্টা/দিন ধরে
1

Series & DataFrame

pandas' two core data structures.
Beginner
📘 বাংলা: পান্ডাসের মূল দুটি ডেটা স্ট্রাকচার।
🌐 English: pandas' two core data structures.

💡 টেবিল ডেটা নিয়ে কাজের প্রধান লাইব্রেরি—Excel-এর চেয়ে শক্তিশালী ও স্বয়ংক্রিয়।

  1. 1
    Series: লেবেলযুক্ত এক কলাম; DataFrame: একাধিক Series-এর টেবিল
  2. 2
    dict থেকে তৈরি: pd.DataFrame({"a":[1,2], "b":[3,4]})
  3. 3
    প্রথম পরিচয়: df.head(), df.shape, df.info(), df.describe()
  4. 4
    কলাম ও ইনডেক্স: df.columns, df.index, df.dtypes
Seriesলেবেলযুক্ত ১-মাত্রিক
DataFrameটেবিল, কলাম = Series
head, info, describeপ্রথম পরিচয়
2

Reading CSV Excel

Load data from files.
Beginner
📘 বাংলা: বিভিন্ন ফাইল থেকে ডেটা লোড।
🌐 English: Load data from files.

💡 বাস্তব কাজের প্রথম ধাপ—ফাইল থেকে সঠিকভাবে ডেটা আনা।

  1. 1
    pd.read_csv("file.csv") — sep, encoding="utf-8", usecols, parse_dates দিন
  2. 2
    pd.read_excel("file.xlsx", sheet_name="Sheet1") (openpyxl লাগে)
  3. 3
    বড় ফাইল: chunksize বা dtype নির্ধারণ
  4. 4
    সংরক্ষণ: df.to_csv("out.csv", index=False), to_excel, to_parquet
read_csvsep, encoding, parse_dates
read_excelsheet_name
to_csv/to_excelসংরক্ষণ
3

Selecting loc iloc

Select rows and columns by label or position.
Beginner
📘 বাংলা: সারি ও কলাম নির্বাচন।
🌐 English: Select rows and columns by label or position.

💡 প্রয়োজনীয় সারি-কলাম বের করাই বিশ্লেষণের অর্ধেক কাজ।

  1. 1
    কলাম: df["col"] বা df[["a","b"]]
  2. 2
    loc: লেবেল দিয়ে df.loc[5, "name"], df.loc[df.age>30, ["name","city"]]
  3. 3
    iloc: অবস্থান দিয়ে df.iloc[0:10, 0:3]
  4. 4
    মান বসানো: df.loc[শর্ত, "col"] = নতুন মান
locলেবেল দিয়ে df.loc[row, col]
ilocঅবস্থান দিয়ে df.iloc[0:5]
কলাম নির্বাচনdf[['a','b']]
4

Filtering Data

Keep rows that match conditions.
Beginner
📘 বাংলা: শর্ত দিয়ে ডেটা ফিল্টার।
🌐 English: Keep rows that match conditions.

💡 প্রশ্নের সাথে প্রাসঙ্গিক ডেটা আলাদা করা।

  1. 1
    একক শর্ত: df[df.cases > 100]
  2. 2
    একাধিক: df[(df.cases>100) & (df.year==2024)] — বন্ধনী ও & | ~ ব্যবহার
  3. 3
    তালিকায় আছে কিনা: df[df.district.isin(["Dhaka","Sylhet"])]
  4. 4
    টেক্সট: df[df.name.str.contains("hospital", case=False)]; পাঠযোগ্য: df.query("cases > 100")
শর্তdf[df.age > 30]
একাধিক শর্ত& ও |
query ও isinপাঠযোগ্য ফিল্টার
5

GroupBy & Aggregation

Summaries per group.
Intermediate
📘 বাংলা: গ্রুপভিত্তিক সারাংশ তৈরি।
🌐 English: Summaries per group.

💡 "প্রতি জেলায় কত?"—প্রায় সব রিপোর্টের প্রশ্ন।

  1. 1
    Split: df.groupby("district")
  2. 2
    Apply: ["cases"].sum() বা .agg(["sum","mean","count"])
  3. 3
    একাধিক কলামে ভিন্ন ফাংশন: .agg(total=("cases","sum"), avg_age=("age","mean"))
  4. 4
    transform দিয়ে গ্রুপ মান প্রতিটি সারিতে ফেরত (গ্রুপের শতাংশ হিসাবের জন্য)
groupbyভাগ-প্রয়োগ-যুক্ত (split-apply-combine)
aggএকাধিক ফাংশন
transformগ্রুপ মান প্রতিটি সারিতে
6

Merge Join Concat

Combine multiple tables.
Intermediate
📘 বাংলা: একাধিক টেবিল যুক্ত করা।
🌐 English: Combine multiple tables.

💡 ডেটা একাধিক টেবিলে থাকে—রোগী, হাসপাতাল, জেলা—এগুলো জোড়া লাগাতে হয়।

  1. 1
    merge(left, right, on="key", how="inner/left/right/outer") — SQL JOIN
  2. 2
    ভিন্ন নামের কী: left_on, right_on
  3. 3
    concat([df1, df2]) — একই কাঠামোর টেবিল উপরে-নিচে যোগ
  4. 4
    validate="one_to_many" ও indicator=True দিয়ে ভুল মিল যাচাই
mergeSQL JOIN-এর মতো
concatসারি/কলাম জোড়া
join ধরনinner, left, outer
7

Pivot Tables

Reshape and summarise data.
Intermediate
📘 বাংলা: ডেটা পুনর্গঠন ও সারাংশ।
🌐 English: Reshape and summarise data.

💡 লম্বা ডেটাকে পাঠযোগ্য রিপোর্ট টেবিলে রূপান্তর (এবং উল্টো)।

  1. 1
    pivot_table(index="district", columns="month", values="cases", aggfunc="sum")
  2. 2
    fill_value=0 ও margins=True দিয়ে মোট
  3. 3
    melt দিয়ে চওড়া → লম্বা (ভিজ্যুয়ালাইজেশনের জন্য)
  4. 4
    crosstab দিয়ে দুই ক্যাটাগরির ফ্রিকোয়েন্সি
pivot_tableindex, columns, values, aggfunc
meltচওড়া থেকে লম্বা
crosstabফ্রিকোয়েন্সি টেবিল
8

Handling Missing Values

Find and fill NaN values.
Advanced
📘 বাংলা: NaN খুঁজে বের করা ও পূরণ।
🌐 English: Find and fill NaN values.

💡 প্রায় সব বাস্তব ডেটায় ফাঁকা ঘর থাকে; ভুলভাবে সামলালে ফল পক্ষপাতদুষ্ট।

  1. 1
    শনাক্ত: df.isna().sum(), শতাংশ df.isna().mean()
  2. 2
    কেন মিসিং বুঝুন: এলোমেলো নাকি নির্দিষ্ট গ্রুপে
  3. 3
    বাদ: dropna(subset=["col"]) — কম হলে
  4. 4
    পূরণ: fillna(median), গ্রুপ মিডিয়ান, interpolate() (টাইম সিরিজ), বা মডেলভিত্তিক ইমপুটেশন
শনাক্তisna().sum()
বাদdropna
পূরণfillna, interpolate, মিডিয়ান ইমপুটেশন
9

Datetime in Pandas

Work with dates and times.
Advanced
📘 বাংলা: তারিখ-সময় ডেটা নিয়ে কাজ।
🌐 English: Work with dates and times.

💡 টাইম সিরিজ, মৌসুমি প্যাটার্ন ও প্রবণতা বিশ্লেষণের জন্য তারিখ সঠিক টাইপে লাগে।

  1. 1
    pd.to_datetime(df.date, format="%d/%m/%Y") দিয়ে রূপান্তর
  2. 2
    .dt.year, .dt.month, .dt.day_name() দিয়ে অংশ
  3. 3
    df.set_index("date").resample("M").sum() — দৈনিক → মাসিক
  4. 4
    সময়ের পার্থক্য: (d2 − d1).dt.days
pd.to_datetimeরূপান্তর
dt অ্যাক্সেসরyear, month, weekday
resampleদৈনিক→মাসিক
10

Apply & Lambda

Apply custom functions to rows or columns.
Advanced
📘 বাংলা: কাস্টম ফাংশন প্রয়োগ।
🌐 English: Apply custom functions to rows or columns.

💡 নিজস্ব যুক্তি প্রয়োগ—যখন বিল্ট-ইন ফাংশন যথেষ্ট নয়।

  1. 1
    Series.map(dict বা ফাংশন) — মান রূপান্তর
  2. 2
    Series.apply(func) — প্রতিটি মানে ফাংশন
  3. 3
    df.apply(func, axis=1) — প্রতিটি সারিতে (একাধিক কলাম লাগলে)
  4. 4
    পারফরম্যান্স: আগে vectorized বিকল্প (np.where, pd.cut) খুঁজুন
applyপ্রতি সারি/কলামে ফাংশন
lambdaএক লাইনের ফাংশন
map ও vectorized বিকল্পদ্রুততর
💻

হাতে-কলমে কোড · Hands-on code

Run চাপুন — পাইথন আপনার ব্রাউজারেই চলবে (Ctrl+Enter)
import pandas as pd, numpy as np
df=pd.DataFrame({"district":["Dhaka","Chattogram","Dhaka","Sylhet","Khulna","Sylhet"],
 "month":pd.to_datetime(["2026-01-01","2026-01-01","2026-02-01","2026-01-01","2026-02-01","2026-02-01"]),
 "cases":[120,80,98,np.nan,45,52]})
df["cases"]=df["cases"].fillna(df["cases"].median())
print(df.groupby("district")["cases"].agg(["count","sum","mean"]).round(1))
print(df.pivot_table(index="district",columns=df.month.dt.month,values="cases",fill_value=0))
📝

অনুশীলন · Practice tasks

  1. একটি CSV লোড করে মিসিং মান রিপোর্ট করুন
  2. জেলাভিত্তিক groupby সারাংশ তৈরি করুন
  3. দুটি টেবিল merge করে নতুন কলাম বানান
  4. ক্যাপস্টোন: Bangladesh district-level data analysis
❓

কুইজ · Quick quiz

1. লেবেল দিয়ে সারি নির্বাচনে কোনটি?

2. মিসিং মান গণনায়?

🎬

ভিডিও লাইব্রেরি · Videos

সাইটের ভেতরে ফ্লোটিং প্লেয়ারে চলবে
এই শাখার ভিডিও এখনো সংরক্ষিত হয়নি। যেকোনো টপিক পেজ খুললে ভিডিও স্বয়ংক্রিয়ভাবে খুঁজে MySQL-এ সংরক্ষিত হবে (API key থাকলে)।

📺 Reference channels

🔗

সংযুক্ত বিষয় · Connected

← আগের শাখা🔢 NumPyপরের শাখা →📈 Data Visualization
🎬 Video