מה זה Pandas?

הספרייה Pandas היא ספריית Python לניתוח ועיבוד מידע. היא חזקה וגמישה מאוד ונחשבת קלה לשימוש. Pandas הוא פרויקט קוד פתוח וחופשי לשימוש.

מעבר לכך, היא שימושית מאוד בעולמות ה- data science ולמידת מכונה.

בסדרת המדריכים הזו, נלמד כיצד להשתמש בכלי החזק הזה כדי להבין את המידע שלנו טוב יותר ולעבוד איתו בצורה יעילה.


ראשית, ודאו ש- Pandas מותקנת אצלכם על המחשב. אם יש לכם פייתון ו- pip מותקנים, תוכלו לעשות זאת בקלות על ידי הפקודה

 pip install pandas

כדי לוודא שהספרייה הותקנה כהלכה, הריצו את השורה הבאה:


import pandas as pd

וודאו שלא קיבלתם הודעות שגיאה כלשהן.

האובייקט DataFrame

האוביקט הבסיסי של Pandas לאחסון מידע הוא ה- DataFrame. באופן כללי, DataFrame בנוי כטבלה - הוא מכיל עמודות ובכל עמודה יש אוסף של ערכים. בואו נראה דוגמה להגדרת DataFrame:


df = pd.DataFrame({'John': [85, 92], 'Bill': [72, 97]})

ב- DataFrame הזה יש שתי עמודות. שם העמודה הראשונה הוא המחרוזת ‘John’ ושם העמודה השנייה הוא המחרוזת ‘Bill’. שימו לב שלאחר שם העמודה מופיעות נקודותיים ואחריהן רשימת הערכים שהעמודה מכילה בתוך סוגריים מרובעים.

בואו ננסה להדפיס את ה- DataFrame שלנו ולראות מה מתקבל:


import pandas as pd

df = pd.DataFrame({'John': [85, 92], 'Bill': [72, 97]})

print(df)

והפלט:

ניתן לגשת לעמודה ספציפית של DataFrame לפי שמה. אם למשל נרצה להדפיס רק את הערכים של העמודה של Bill, נוכל לעשות זאת כך:


print(df.Bill)

שימו לב שבדוגמה לעיל, נתנו שמות לעמודות, אך השורות קיבלו כברירת מחדל את הערכים 0, 1 וכן הלאה. אנו יכולים לשנות את שמות השורות על ידי קביעת ערך לפמטר index של הבנאי של DataFrame:


df = pd.DataFrame({'John': [85, 92],

                   'Bill': [72, 97]},

                  index=['Algebra', 'Calculus'])

print(df)

כעת השורות תקבלנה את השמות שקבענו, והפלט הוא כזה:

האובייקט Series

מעבר ל- DataFrame, ב- Pandas קיים גם האובייקט Series לאחסון מידע. אפשר להתייחס לאובייקט זה כאוסף המידע שמוחזק בעמודה בודדת של DataFrame, או במילים אחרות, כרשימה של ערכים. כך ניתן ליצור אובייקט של Series:


sr = pd.Series(['John', 'Charlie', 'Alex', 'Scott'])

האובייקט Series דומה מאוד לרשימה פייתונית, ואפשר אפילו להמיר רשימה כזו ל- Series.


list1 = [3, 7, 17, 25, 31]

df = pd.DataFrame(list1)

print(df)

הפלט:

קריאת קובץ CSV באמצעות Pandas

בעבודה עם Pandas, לא תמיד נרצה ליצור בעצמנו את המידע איתו נעבוד. בחלק גדול מהמקרים נעבוד עם dataSet, ואחת הדרכים לקבל dataSet כזה היא לקרוא אותו מקובץ.

אחד הפורמטים הפופולריים לאחסון מידע הוא CSV. CSV זה ראשי תיבות של comma separated values, כלומר ערכים מופרדים בפסיק (כיוון שפורמט זה משתמש בפסיק על מנת להפריד בין ערכים).

ב- Pandas יש פונקציות מובנות לעבודה עם קבצי CSV.

בואו נראה דוגמה לעבודה עם קובץ כזה. הקובץ שלנו יכיל Dataset של חוות דעת של טעימות יין. תוכלו להוריד אותו מכאן (שימו לב, יהיה עליכם ליצור חשבון באתר Kaggle לצורך כך):

חלצו את קובץ ה- CSV מתוך קובץ ה- zip שהורדתם ושימו אותו בתוך תיקייה בשם datasets ליד קובץ הפייתון.

כדי לקרוא את הקובץ באמצעות Pandas, נשתמש בפונקציה read_csv:

wine_reviews = pd.read_csv("datasets/winemag-data-130k-v2.csv")

הפונקציה read_csv מחזירה אובייקט של DataFrame וכעת כשיש לנו אובייקט כזה, נוכל למצוא את המימדים של ה- DataSet באמצעות השדה shape:

wine_reviews = pd.read_csv("datasets/winemag-data-130k-v2.csv")
print(wine_reviews.shape)

הפלט:

אנו רואים שבקובץ יש 129971 שורות ו- 14 עמודות. כמעט 2 מיליון נתונים!

כדי להתרשם מהמבנה של ה- DataSet, נוכל להשתמש בפונקציה head:


wine_reviews = pd.read_csv("datasets/winemag-data-130k-v2.csv")
print(wine_reviews.head())

פונקציה זו מחזירה את 5 השורות הראשונות ב- DataSet כך שנוכל להבין את המבנה שלו.

שימו לב שמשום מה, האינדקס של כל שורה מופיע פעמיים - גם בעמודה הראשונה וגם בעמודה השנייה. הסיבה היא שה- Dataset עצמו מחזיק עמודה של אינדקסים, אבל כיוון ש- Pandas לא מודעת לכך, היא בנתה בעצמה עמודה (נוספת) של אינדקסים. כדי להימנע מהכפילות הזו, ניתן ליידע את Pandas שכבר קיימת עמודה כזו ב- Dataset, כך ש- Pandas לא תוסיף את המידע הזה בעצמה. כדי ליידע את Pandas על קיום עמודת האינדקסים, ניתן ערך לפרמטר index_col בעת הקריאה ל- read_csv. ערכו של index_col יהיה האינדקס של עמודת האינדקסים:

wine_reviews = pd.read_csv("datasets/winemag-data-130k-v2.csv", index_col=0)
print(wine_reviews.head())

וכעת קיבלנו את אותו מידע, אך כעת יש ב- DataFrame רק 13 עמודות, כיוון שיש עמודה אחת בלבד של אינדקסים, ולא שתיים.