মূল content-এ যাও

Python for AI/Pandas/Lesson 44

Selection: loc ও iloc

Label দিয়ে loc, position দিয়ে iloc — row, column আর দুটো একসাথে বাছাই; set_index; আর ML-এর জন্য feature (X) ও target (y) আলাদা করা।

সময়
22 মিনিট
Exercise
1
Challenge
1
Quiz
3 প্রশ্ন

সহজ ভাষায়

DataFrame থেকে অংশ বের করার দুটো প্রধান উপায়:

  • loc — label (নাম) দিয়ে: df.loc["Mim", "cgpa"]
  • iloc — position (কত নম্বর) দিয়ে: df.iloc[1, 1]
main.py

দুটোই [row, column] — NumPy-র মতো।

কেন দরকার?

  • ML-এর জন্য X আর y আলাদা করা
  • নির্দিষ্ট customer বা product-এর তথ্য খোঁজা
  • শর্ত মানা row-এ মান বদলানো — যেমন অস্বাভাবিক মান ঠিক করা
  • Train/test ভাগের পর নির্দিষ্ট row বের করা

Column বাছাই

main.py

"area":"rooms" — label দিয়ে slice, দুই প্রান্ত সহ।

loc বনাম iloc

main.py
lociloc
কী দিয়েlabelposition (0, 1, 2…)
Slice-এর শেষসহবাদ
Negative (-1)না (label হিসেবে খোঁজে)হ্যাঁ
Boolean maskহ্যাঁশুধু array (Series না)

Default index (0, 1, 2…) থাকলে label আর position একই দেখায় — তাই পার্থক্যটা ধরা পড়ে না, যতক্ষণ না sort বা filter করার পর index এলোমেলো হয়।

main.py

Sort-এর পর index [1, 2, 0] — loc[0] দেয় Rafi (label 0), iloc[0] দেয় Mim (প্রথম row)। "সেরা" student চাইলে iloc!

set_index: একটা column-কে index বানানো

main.py

মান বদলানো: সবসময় .loc

main.py

df.loc[শর্ত, column] = মান — এক ধাপে, নিরাপদে।

এর বদলে দুই ধাপে (chained) লিখলে:

main.py

কিছুই বদলায়নি! df[df["cgpa"] >= 3.7] একটা নতুন DataFrame দেয়, তার grade বদলেছে, মূল df না। Pandas 3.0-এর Copy-on-Write নিয়মে এটা সবসময় এভাবেই আচরণ করে।

Exercise

Exercise

ঠিক ঘরটা বের করো

+20 XP

df-এর index হলো student-এর নাম। বের করো:

  • mim_cgpa — Mim-এর cgpa (loc দিয়ে)
  • first_two — প্রথম দুটো row, শুধু dept আর cgpa column (iloc দিয়ে, DataFrame)
  • cse_names — যাদের dept "CSE", তাদের নাম (index)-এর list (loc + শর্ত দিয়ে)
solution.py

Quiz

  1. Q1df.loc[0:2] আর df.iloc[0:2] — default index (0, 1, 2...) হলে কতগুলো row আসে?
  2. Q2শেষ column-টা বের করতে কোনটা?
  3. Q3Pandas 3-এ df[df["cgpa"] > 3.5]["grade"] = "A" লিখলে কী হয়?
0/3 answered

Challenge

Challenge

Feature আর target আলাদা করো

+50 XP

Model train করার আগে প্রতিবার যা করতে হয়: split_xy(df, target, drop=()) function লেখো যেটা return করে (X, y):

  • y — target column (Series)
  • X — বাকি সব column (DataFrame), তবে drop-এ দেওয়া column-গুলোও বাদ (যেমন id, যেগুলো feature না)

মূল df যেন বদলে না যায়।

solution.py

বাস্তবে কোথায় ব্যবহার হয়?

Leaderboard — top-k বের করে position দিয়ে rank দেওয়া, যেখানে iloc না loc-এর পার্থক্য সত্যিই গুরুত্বপূর্ণ:

main.py

শেষ লাইনটা গুরুত্বপূর্ণ — সবচেয়ে accurate model সবসময় সেরা পছন্দ না। Production-এ প্রায়ই সামান্য কম accuracy কিন্তু অনেক দ্রুত model বেছে নেওয়া হয়।

Interview প্রশ্ন

  • Beginner: loc আর iloc-এর পার্থক্য কী?
  • Intermediate: Sort করার পর df.loc[0] কেন প্রথম row দেয় না?
  • Advanced: SettingWithCopyWarning কী ছিল, আর Pandas 3.0-এর Copy-on-Write এই সমস্যার কীভাবে সমাধান করেছে?

এরপর কী?

loc-এ শর্ত দিয়ে row বাছাই একটু দেখলাম। এবার সেটা বিস্তারিত — একাধিক শর্ত, text খোঁজা, sort, top-n। পরের lesson: Filtering।