שימו לב: על מנת להריץ את התאים ב-Live Code, יש לייבא תחילה את ספרית pandas ע”י הרצת השורת הראשונה בתא למטה.
בנוסף, נגביל את מספר השורות והעמודות שתופענה בהדפסת הטבלאות ע”י שורות הקוד השניה והשלישית:
import pandas as pd
pd.options.display.max_rows=5
pd.options.display.max_columns=5
ביצוע שאילתות בטבלה#
שאילתות לטבלה הן פקודות שמאפשרות לסנן, לבחור או לאתר נתונים מתוך הטבלה לפי תנאים מוגדרים מראש.
בחלק זה נתרגל את היכולת שלנו לבצע שאילתות מסוג אלה, באמצעות הכלים שלמדנו עד כה: Masking ו-sum.
בנוסף, ניעזר במתודה חדשה - ()count המבצעת ספירת ערכים. count, בדומה לsum, פועלת לפי הציר שהוגדר לה.
נטען תחילה את טבלת הציונים שלנו מחדש:
inputFileName = "files/StudentsGrades.csv"
df = pd.read_csv(inputFileName)
כעת, נסחו שאילתות שמחלצות מהטבלה את הנתונים המבוקשים.
מספר סטודנטים שנכשלו בכל אחד מהקורסים. יש לפתור בשתי שורות קוד.
# Write your code here
לחצו כאן כדי לצפות בפתרון
df_no_names = df.drop('Name', axis=1)
print(df_no_names[df_no_names < 60].count())
כמה ציונים נכשלים יש בכל הטבלה. יש לפתור בשתי שורות קוד.
# Write your code here
לחצו כאן כדי לצפות בשני פתרונות אפשריים
df_no_names = df.drop('Name', axis=1)
# Option 1
print(df_no_names[df_no_names < 60].count().sum())
# Option 2
print(df_no_names[df_no_names < 60].count(axis=1).sum())
א. בכמה קורסים נכשל כל סטודנט - ללא שמות סטודנטים. יש לפתור בשתי שורות קוד.
# Write your code here
לחצו כאן כדי לצפות בפתרון
df_no_names = df.drop('Name', axis=1)
print(df_no_names[df_no_names < 60].count(axis=1))
ב. בכמה קורסים נכשל כל סטודנט - לפי שמות הסטודנטים. יש לפתור בשורת קוד אחת.
# Write your code here
לחצו כאן כדי לצפות בפתרון
display(df.apply(lambda row: pd.Series([row["Name"], row.drop("Name")[row.drop("Name") < 60].count()]) ,axis=1))
שמות כל הסטודנטים שנכשלו ב-
Marine Biologyאו ב-Stellar Cartography. יש לפתור בשורת קוד אחת.
# Write your code here
לחצו כאן כדי לצפות בפתרון
df.loc[(df['Marine Biology'] < 60) | (df['Stellar Cartography'] < 60), "Name"]
שמות כל הסטודנטים שקיבלו 90 ומעלה ב
ArtוMath. יש לפתור בשורת קוד אחת.
# Write your code here
לחצו כאן כדי לצפות בפתרון
df.loc[(df['Art'] >= 90) & (df['Math'] >= 90), 'Name']
שם הסטודנט בעל ממוצע הציונים הגבוה ביותר.
רמז
קראו בגוגל או שאלו את מודל השפה האהוב עליכם לגבי הפונקציות idxmin וidxmax של pandas.
# Write your code here
לחצו כאן כדי לצפות בפתרון
df['Avg'] = df.iloc[:,1:].mean(axis=1) # Create a column of the average grade per student
max_id = df['Avg'].idxmax() # max_id is the row name (index) of the highest student
print(df.loc[max_id]["Name"]) # Access the Name column in the max_id row
שימו לב
idxmax ו-idxmin מחזירים את שם השורה או העמודה (תלוי בaxis), ולכן בדרך כלל נשתמש בהם בשילוב עם loc.
ניתן להשתמש בidxmin או idxmax ללא שימוש בloc במקרים בהם לשמות השורות/העמודות עצמן יש את המשמעות הרצויה.
תרגיל#
איזה נתון חילצנו בקוד להלן?
print(df.drop('Name', axis=1).mean(axis=0).idxmax())
Art
לחצו כאן כדי לצפות בפתרון
במקרה הזה, ניסינו לחלץ את המקצוע בו ממוצע הציונים הוא הגבוה ביותר. מאחר ששם העמודה עצמה הוא הנתון אותו ניסינו לשלוף, idxmax סיפק את שם העמודה (מה שרצינו), ולא היה צורך להשתמש בloc.