# מערך שיעור: Pandas — DataFrame, Series📋 מערך מרצה

משך: 2 שעות אקדמיות (90 דקות).

מטרת השיעור: הסטודנטים יתחילו לעבוד עם DataFrame/Series, ויבינו את ההבדל בין iloc ל-loc.

בסוף השיעור הסטודנטים צריכים: לטעון נתונים עם read_csv, לגשת לנתונים עם iloc/loc נכון, ולהשתמש ב-head/info/describe לסקירה ראשונית.

דגש קריטי: זו הפעם הראשונה שסטודנטים כותבים פייתון "אמיתי" (מעבר לConsumer הבסיסי מיחידת NoSQL) — אל תניחו רקע syntax כלל.

---

## מהלך השיעור

| חלק בשיעור | משך | הערות ודגשים |
| --- | --- | --- |
| פתיחה וחיבור | 5 דקות | הזכירו את הConsumer בפייתון מיחידת Kafka — "היום נעמיק בפייתון" |
| syntax בסיסי (אם נדרש) | 15 דקות | dict, list comprehension בקצרה אם הכיתה זקוקה |
| הרעיון: DataFrame | 20 דקות | טבלה בזיכרון, קישרו ל-DbSet<T> מיחידת EF Core |
| read_csv/json | 15 דקות | טעינה ממקורות שונים |
| iloc מול loc | 25 דקות | הדגישו הבדל אחרי סינון/מיון |
| head/info/describe | 10 דקות | שגרת בדיקה ראשונית |
| תרגול מודרך | 10 דקות | תרגיל 1+2 |

---

## דגשים להעברת השיעור

- אם הכיתה חסרת רקע Python כלל, שקלו 10-15 דקות syntax-primer לפני DataFrame עצמו — לא להניח שכולם מכירים dict/list comprehension.
- ההבדל `.iloc`/`.loc` הוא מלכודת קלאסית — הדגימו אותה **אחרי** סינון (לא לפני), כי לפני סינון הם לרוב זהים ומטשטשים את ההבדל.
- קישרו DataFrame ל-`DbSet<T>` מיחידת EF Core בקצרה — "טבלה בזיכרון, בלי DB אמיתי מאחוריה" — אנלוגיה מהירה שכבר מוכרת.

---

## מושגים

**`DataFrame`** — טבלה דו-ממדית בזיכרון.
**`Series`** — עמודה בודדת.
**`.iloc`** — גישה לפי מיקום מספרי.
**`.loc`** — גישה לפי תווית.

---

## תרגיל חשיבה

**שאלת פתיחה:** "יש לכם DataFrame עם 10 שורות, סיננתם אותו לרק 3 שורות שנשארו (עם אינדקסים מקוריים 2, 5, 8). מה `.iloc[0]` יחזיר? ומה `.loc[0]`?"

**מהלך:** תנו לסטודנטים לחשוב לפני שעונים. התשובה: `.iloc[0]` מחזיר את השורה **הראשונה בתוצאה המסוננת** (זו עם אינדקס מקורי 2) — כי iloc הוא תמיד לפי מיקום נוכחי. `.loc[0]` ינסה למצוא שורה עם **תווית** 0 בדיוק — וזו לא קיימת יותר בתוצאה המסוננת (האינדקסים 2,5,8 בלבד) — שגיאה!

**מה המרצה מראה בסוף:** הריצו את התרחיש בדיוק כמו בשאלה — סננו DataFrame, ואז הריצו `.iloc[0]` (עובד, מחזיר שורה) ו-`.loc[0]` (שגיאת KeyError אם אינדקס 0 לא בתוצאה) בשידור חי. השגיאה בפועל מבססת את ההבדל טוב יותר מכל הסבר.
