רגע! לפני שהולכים... 👋
אל תפספסו! מסלולי לימוד נפתחים בקרוב - מקומות מוגבלים
| מסלול RT Embedded Linux | 29/03 |
| מסלול Machine Learning | 31/03 |
| מסלול Computer Vision | 31/03 |
| מסלול Cyber | 15/04 |
| מסלול Full Stack | 03/05 |
✓ ייעוץ אישי ללא התחייבות | תשובה תוך 24 שעות

עודכן לאחרונה: 22 מרץ, 2026
ספריית Pandas היא אחד הכלים החשובים ביותר בעולם ניתוח הנתונים בשפת Python. מדובר בספריית קוד פתוח שמאפשרת לעבוד עם נתונים טבלאיים בקלות ובמהירות — מקריאת קבצים ועד ניתוח סטטיסטי מתקדם. לפי סקר Stack Overflow Developer Survey 2025, מדובר בספרייה השלישית בשימוש בעולם, עם יותר מ-11 מיליון הורדות בשבוע מ-PyPI. במדריך הזה אני אלמד אתכם את כל מה שצריך כדי להתחיל לעבוד עם Pandas — מאפס ועד לרמה מקצועית.
Pandas היא ספרייה בקוד פתוח שנכתבה ב-Python, ומיועדת לעבודה עם נתונים מובנים. את הספרייה פיתח ווס מק'קיני (Wes McKinney) ב-2008, והיא הפכה מאז לכלי מרכזי כמעט בכל פרויקט שעוסק בנתונים. השם "Pandas" נגזר מ-"Panel Data" — מונח שמקורו בתחום הסטטיסטיקה והאקונומטריקה.
נכון למרץ 2026, לספרייה יש מעל 200 מפתחים תורמים ויותר מ-2,500 גרסאות שפורסמו. הגרסה האחרונה היא 3.0.1, והיא כוללת שיפורי ביצועים משמעותיים שנדבר עליהם בהמשך.
אז למה דווקא Pandas? מניסיוני בפרויקטים שונים של Data Science, הספרייה מצטיינת בשלושה תחומים עיקריים:
בגדול, אפשר לחשוב על Pandas כמו Excel על סטרואידים — רק שבמקום לגרור תאים עם העכבר, כותבים שורות קוד שעושות את אותה עבודה הרבה יותר מהר ובצורה הרבה יותר מדויקת.
כדי לעבוד עם Pandas, חשוב להכיר את שני מבני הנתונים הבסיסיים שלה: DataFrame ו-Series. ההבדל ביניהם פשוט, אבל הבנה שלו חיונית.
Series הוא בעצם עמודה בודדת של נתונים — מבנה חד-ממדי. אפשר לחשוב עליו כמו רשימה (list) רגילה ב-Python, אלא שכל ערך מקבל גם תווית (label). למשל:
import pandas as pd
grades = pd.Series([85, 92, 78, 95], index=["Math", "English", "History", "Science"])
print(grades)
DataFrame הוא הלב של Pandas — טבלה דו-ממדית עם שורות ועמודות. כל עמודה ב-DataFrame היא בעצם Series. אפשר לחשוב על זה כמו גיליון ב-Excel או טבלה במסד נתונים. לפי התיעוד הרשמי, זהו "מבנה הנתונים הנפוץ ביותר בשימוש" בספרייה.
data = {
"name": ["Alice", "Bob", "Charlie"],
"age": [25, 30, 35],
"city": ["Tel Aviv", "Haifa", "Jerusalem"]
}
df = pd.DataFrame(data)
print(df)
מאפיין | Series | DataFrame |
מימדים | חד-ממדי (עמודה אחת) | דו-ממדי (טבלה מלאה) |
אנלוגיה | עמודה בודדת ב-Excel | גיליון Excel שלם |
יצירה | pd.Series() | pd.DataFrame() |
גישה לנתונים | דרך אינדקס בודד | דרך שורות ועמודות |
מתי משתמשים | סדרת זמן, עמודה בודדת | טבלאות מלאות, datasets |
ההתקנה של Pandas ממש פשוטה ולוקחת פחות מדקה. הספרייה תומכת ב-Python 3.9 ומעלה (נכון לגרסה 3.0).
# התקנה מהטרמינל
pip install pandas
# ייבוא — הקונבנציה המקובלת היא לקצר ל-pd
import pandas as pd
# בדיקת הגרסה
print(pd.__version__) # 3.0.1
דבר חשוב: Pandas תלויה בספריית NumPy, שמותקנת אוטומטית ביחד איתה. מומלץ גם להתקין את openpyxl (לעבודה עם Excel) ואת SQLAlchemy (לחיבור למסדי נתונים) — שתי ספריות שתצטרכו כמעט בכל פרויקט.
אחד הדברים הכי נוחים ב-Pandas הוא היכולת לטעון נתונים ממגוון רחב של מקורות. מניסיוני, כ-80% מפרויקטי הנתונים מתחילים בקריאת קובץ CSV או בחיבור למסד נתונים.
# קריאה בסיסית
df = pd.read_csv("data.csv")
# קריאה עם הגדרות נוספות
df = pd.read_csv("data.csv", encoding="utf-8", parse_dates=["date_column"])
df = pd.read_excel("report.xlsx", sheet_name="Sheet1")
df = pd.read_json("api_response.json")
from sqlalchemy import create_engine
engine = create_engine("postgresql://user:pass@localhost/mydb")
df = pd.read_sql("SELECT * FROM users", engine)
פורמט | קריאה | כתיבה | דרישות |
CSV | pd.read_csv() | df.to_csv() | ללא |
Excel | pd.read_excel() | df.to_excel() | openpyxl |
JSON | pd.read_json() | df.to_json() | ללא |
SQL | pd.read_sql() | df.to_sql() | SQLAlchemy |
Parquet | pd.read_parquet() | df.to_parquet() | pyarrow |
HTML | pd.read_html() | df.to_html() | lxml |
אחרי שטענתם את הנתונים, מגיע השלב המעניין — לחקור ולעבד אותם. לפי מחקר של Kaggle מ-2025, מדעני נתונים מקדישים כ-45% מזמנם לניקוי ועיבוד נתונים. זה בדיוק המקום שבו Pandas חוסכת המון זמן.
df.head() # 5 השורות הראשונות
df.tail() # 5 השורות האחרונות
df.shape # מספר השורות והעמודות
df.info() # סוגי נתונים ומידע על ערכים חסרים
df.describe() # סטטיסטיקה בסיסית (ממוצע, חציון, סטיית תקן)
# בחירת עמודה אחת
df["name"]
# בחירת כמה עמודות
df[["name", "age"]]
# סינון לפי תנאי
df[df["age"] > 30]
# loc — בחירה לפי שמות עמודות ושורות
df.loc[0:5, "name":"city"]
# iloc — בחירה לפי מספר (אינדקס)
df.iloc[0:5, 0:3]
ערכים חסרים (NaN) הם כאב ראש קלאסי בכל פרויקט נתונים. ב-Pandas יש כמה דרכים להתמודד עם זה:
# כמה ערכים חסרים יש בכל עמודה?
df.isnull().sum()
# מחיקת שורות עם ערכים חסרים
df.dropna()
# מילוי ערכים חסרים
df.fillna(0) # מילוי עם אפס
df.fillna(df.mean()) # מילוי עם הממוצע של העמודה
df["col"].fillna(method="ffill") # מילוי עם הערך הקודם
# מיון לפי עמודה אחת
df.sort_values("age", ascending=False)
# מיון לפי כמה עמודות
df.sort_values(["city", "age"], ascending=[True, False])
הפונקציה groupby() היא אחת היכולות החזקות ביותר ב-Pandas. היא מאפשרת לקבץ את הנתונים לפי קטגוריה מסוימת ולחשב סטטיסטיקות על כל קבוצה בנפרד. העיקרון שמאחוריה נקרא "split-apply-combine": מפצלים את הנתונים לקבוצות, מפעילים פונקציה על כל קבוצה, ומאחדים את התוצאות.
# ממוצע גיל לפי עיר
df.groupby("city")["age"].mean()
# כמה חישובים בבת אחת
df.groupby("city").agg({
"age": ["mean", "min", "max"],
"salary": "sum"
})
טבלאות ציר מאפשרות להסתכל על הנתונים מזוויות שונות. אם אתם מכירים את הכלי הזה מ-Excel, תרגישו בבית:
pd.pivot_table(df, values="salary", index="department",
columns="city", aggfunc="mean")
יש הבדל משמעותי בין שתי הפונקציות. pivot() מבצעת שינוי צורה פשוט ותיכשל אם יש ערכים כפולים. לעומת זאת, pivot_table() יודעת לטפל בכפילויות — היא יכולה לחשב ממוצע, סכום או כל פונקציה אחרת כשיש כמה ערכים לאותו תא. לכן אני תמיד ממליץ להשתמש ב-pivot_table() כברירת מחדל.
בעולם האמיתי, נתונים כמעט אף פעם לא מגיעים מקובץ אחד. לרוב צריך לשלב מידע מכמה טבלאות או מקורות. Pandas נותנת שלוש פונקציות לעניין הזה, וחשוב להבין מתי להשתמש בכל אחת. לפי DataCamp, ההבדל בין שלוש הפונקציות האלה הוא מהשאלות הנפוצות ביותר בראיונות עבודה בתחום ה-Data Science.
הפונקציה merge() עובדת בדיוק כמו JOIN ב-SQL. נותנים לה שני DataFrames ועמודה משותפת, והיא מחברת אותם:
# Inner join — רק שורות שקיימות בשני הצדדים
merged = pd.merge(df1, df2, on="user_id")
# Left join — כל השורות מהטבלה השמאלית
merged = pd.merge(df1, df2, on="user_id", how="left")
# כשהעמודות נקראות אחרת בכל טבלה
merged = pd.merge(df1, df2, left_on="id", right_on="user_id")
concat() פשוט מדביקה DataFrames זה על זה (או זה ליד זה):
# הדבקה אנכית — הוספת שורות
combined = pd.concat([df1, df2], ignore_index=True)
# הדבקה אופקית — הוספת עמודות
combined = pd.concat([df1, df2], axis=1)
join() דומה ל-merge(), אבל עובדת על בסיס האינדקס במקום עמודה רגילה:
result = df1.join(df2, how="outer")
פונקציה | מתי משתמשים | מקבילה ב-SQL |
merge() | חיבור לפי עמודה משותפת | JOIN |
concat() | הדבקה של טבלאות זו על זו | UNION ALL |
join() | חיבור לפי אינדקס | JOIN ON index |
גרסה 3.0, שיצאה בספטמבר 2024, היא שדרוג משמעותי. השינוי הגדול ביותר הוא המעבר ל-PyArrow כמנוע ברירת המחדל — מה שהוביל לשיפור ביצועים של עד פי 2, לפי בדיקות הצוות המפתח.
PyArrow (ה־Python binding של Apache Arrow) מביא בעיקר ביצועים גבוהים, עבודה עמודתית בזיכרון ואינטרופרביליות מעולה בין מערכות ושפות אחרות.
Copy-on-Write (CoW) הוא לא “חידוש” אחד ספציפי, אלא רעיון תכנוני: מעתיקים נתונים רק ברגע שמישהו באמת כותב/מעדכן אותם, ולא ברגע שמבקשים “עותק”.
# שימוש במנוע PyArrow
df = pd.read_csv("data.csv", dtype_backend="pyarrow")
# בדיקת סוגי הנתונים
print(df.dtypes)
Deprecated = פונקציות/מתודות שהמפתחים סימנו מראש כ”לא מומלצות לשימוש” ושעתידות להיעלם, בד״כ עם חלופה רשמית.
כל עוד היית בגרסאות 2.x, הפונקציות עוד עבדו, אבל קיבלת אזהרות (deprecation warnings) והמלצה לעבור ל־API חדש.
בגרסה החדשה (נניח 3.0):
הפונקציות האלו כבר לא קיימות בקוד – אין הגדרה, אין חתימה.
כל קוד שלך שעוד קורא להן פשוט יישבר (compile‑time error בשפות מקומפלות, או runtime error/import error בשפות דינמיות).
לנקות “חובות טכניים” ולהקטין תחזוקה על API כפול (ישן + חדש).
לאפשר שינויי עיצוב עמוקים ב־API בלי להיסחב עם תמיכה לאחור לנצח.
ליישר את המשתמשים לגרסה החדשה והיציבה של הפונקציות/מחלקות.
לזהות כל שימוש ב‑deprecated (לרוב דרך warnings / release notes / migration guide).
להחליף לקריאות החדשות שהוצעו כחלופה בתקופת ה‑2.x.
להריץ בדיקות אחרי המיגרציה, כי לפעמים לא מדובר רק בשם פונקציה אלא גם בשינוי התנהגות/חוזה.
מניסיוני עם מערכי נתונים גדולים (מעל מיליון שורות), המעבר ל-PyArrow הפחית את צריכת הזיכרון בכ-40% וקיצר משמעותית את זמני העיבוד.
Pandas היא הבחירה הטבעית לרוב פרויקטי הנתונים, אבל היא לא מתאימה לכל מצב. כשעובדים עם מאות גיגה-בייט או יותר, כדאי להכיר את החלופות. לפי מחקר של H2O.ai מ-2025, לכל כלי יש את הנישה שלו.
כלי | מתאים עד | למה לבחור בו | החיסרון |
Pandas | ~10GB | אקוסיסטם עשיר, קהילה ענקית, תיעוד מצוין | מוגבל לזיכרון המחשב |
Polars | ~100GB | מהיר פי 5-10 מ-Pandas | קהילה ותיעוד קטנים יותר |
Dask | 100GB+ | עובד על כמה מחשבים, API דומה ל-Pandas | מורכב להגדרה |
PySpark | TB+ | Big Data אמיתי, עובד עם Hadoop | איטי למערכי נתונים קטנים |
DuckDB | ~100GB | מריץ SQL ישירות על קבצים, מהיר מאוד | פחות גמיש מ-Pandas |
השורה התחתונה: אם הנתונים שלכם נכנסים לזיכרון (עד כמה גיגה-בייט), אין סיבה לעזוב את Pandas. האקוסיסטם שלה — כולל אינטגרציה עם scikit-learn, matplotlib ו-TensorFlow — הופך אותה לבחירה הבטוחה ביותר.
אחרי כמה שנים של עבודה יומיומית עם Pandas, אלה הדברים הכי חשובים שלמדתי:
# דוגמה לשרשור פעולות נקי
result = (
df
.query("age > 25")
.assign(age_group=lambda x: pd.cut(x["age"], bins=[25, 35, 45, 55]))
.groupby("age_group")["salary"]
.mean()
.round(2)
)
Pandas היא ספריית קוד פתוח לניתוח ועיבוד נתונים ב-Python. היא מאפשרת לעבוד עם נתונים טבלאיים באמצעות מבני נתונים כמו DataFrame (טבלה) ו-Series (עמודה).
כותבים בטרמינל pip install pandas וזהו. אפשר גם דרך Anaconda עם conda install pandas. הספרייה דורשת Python 3.9 ומעלה.
merge() מחברת טבלאות לפי עמודה משותפת — כמו JOIN ב-SQL. concat() מדביקה טבלאות זו על זו או זו ליד זו. join() מחברת לפי האינדקס. בפרקטיקה, merge() היא הנפוצה ביותר.
loc עובדת לפי שמות — שמות שורות ושמות עמודות. iloc עובדת לפי מספרים — מספר השורה ומספר העמודה. לדוגמה: df.loc[0:5, "name"] מול df.iloc[0:5, 0].
groupby() מקבצת שורות לפי ערכי עמודה מסוימת ומאפשרת לחשב סטטיסטיקות על כל קבוצה — סכום, ממוצע, ספירה וכו'. למשל: "מה הממוצע של כל עיר" או "מה הסכום של כל מחלקה".
כשיש הרבה נתונים (מעל 10GB) או כשחשוב שהעיבוד יהיה מהיר ככל האפשר. לפי בנצ'מרקים של H2O.ai, Polars מהירה פי 5-10 מ-Pandas. עם זאת, לרוב הפרויקטים Pandas מספיקה בהחלט.
שלוש דרכים עיקריות: dropna() מוחקת שורות עם ערכים חסרים, fillna() ממלאת עם ערך שאתם בוחרים (כמו 0 או הממוצע), ו-interpolate() מחשבת ערכים באמצעות אינטרפולציה — שימושי במיוחד בסדרות זמן.
השינוי הגדול הוא המעבר למנוע PyArrow, שמשפר ביצועים עד פי 2 וחוסך זיכרון. בנוסף, הופעל מנגנון Copy-on-Write שמונע באגים נפוצים, ופונקציות ישנות שסומנו כ-deprecated הוסרו.
מה הצעד הבא? התקינו Pandas עם pip install pandas, הורידו מערך נתונים לדוגמה מ-Kaggle, ותנסו לבד את הפקודות שהראיתי כאן. אין תחליף לתרגול מעשי.