18 פעולות שאתה צריך להכיר כשאתה עובד עם Pandas של Python

מחבר:
בתאריך:

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

Python pandas library

 

המושגים הבסיסיים

DataFrame - מידע שמסודר בעמודות ושורות. בדומה למסד נתונים SQL, SPSS או גליון אקסל.

Series - עמודה אחת ב-DataFrame.

 

1. כיצד לייבא את pandas?

import pandas as pd

 

2. כיצד לייבא קובץ csv?

במדריך אני משתמש בקובץ cars.csv, שאותו אתם יכולים להוריד מכאן: להורדה.

כדי לקרוא את הקובץ:

df = pd.read_csv('cars.csv')

כדי לקרוא רק חלק מהעמודות:

df = pd.read_csv('cars.csv', usecols=['model', 'price', 'description'])

כדי לעשות parsing של עמודות התאריכים:

df = pd.read_csv('cars.csv', parse_dates=['date'])

parse_date מקבל מערך של שמות העמודות.

 

3. כיצד להתמודד עם מידע חסר?

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

נתחיל מזיהוי הנתונים החסרים.

לספירת מספר ה-NaN בכל סט הנתונים:

df.isnull().sum().sum()

למציאת מספר ה-NaN לפי עמודות:

df.isnull().sum()
model          0
price          4
description    0
date           0
dtype: int64

במידה וחסרים ערכים ניתן להשלים אותם, לדוגמה, אם חסר מידע בתאים בעמודת price נשלים אותו ל-0.

df.price = df.price.fillna('0')

אפשרות נוספת להתמודדות עם בעיית המידע החסר היא למחוק את כל השורות שחסר בהם מידע.

df = df.dropna(axis=0)

 

4. כיצד להמיר את סוג הנתונים בעמודות?

כשרוצים להמיר את העמודה price לסוג נתונים int:

df.price = df.price.astype('int')

אפשר גם לסוג float.

ומועיל במיוחד הוא הפיכה לסוג datetime.

df.date = df.to_datetime(df.date)

 

5. כיצד לקבוע את עמודת האינדקס?

pandas מאנדקס את סט הנתונים לפי סדר השורות החל מ-1 ועד למספר השורות בסט. כדי להגדיר את האינדקס על עמודה אחרת, לדוגמה, עמודת date:

df.set_index('date')

 

6. כיצד לסקור את המידע ב-DataFrame?

כדי להציץ ב-5 השורות הראשונות של ה-dataframe:

df.head()

pandas head command

ניתן להציץ במספר שונה של שורות, לדוגמה 10 שורות:

df.head(10)

אפשר לבחור לראות רק השורות האחרונות של סט הנתונים:

df.tail()

ואפשר לראות מספר שורות אקראיות:

df.sample(10)

כדי לצפות במספר השורות והעמודות:

df.shape
(59, 4)

כדי לראות נתונים סטטיסטיים כלליים על ה-dataframe:

df.describe()

pandas dataframe describe

וכדי לראות סוג הנתונים בעמודות:

df.info()

RangeIndex: 59 entries, 0 to 58
Data columns (total 4 columns):
model          59 non-null object
price          59 non-null int64
description    59 non-null object
date           59 non-null datetime64[ns]
dtypes: datetime64[ns](1), int64(1), object(2)
memory usage: 1.9+ KB

df.info() מראה את סוג הנתונים (object למחרוזת), שם העמודה ואת מספר הנתונים בכל עמודה.

 

7. כיצד להוסיף עמודה ל-dataframe?

נוסיף את העמודה sold, ונציב את הערך True בכל אחד מהתאים:

df['sold'] = True

כדי להוסיף עמודה במקום מסוים נציין את מספר האינדקס של העמודה. לדוגמה, עמודה ששמה convertible (גג נפתח) בתור העמודה הראשונה (אינדקס 0).

df.insert(0, 'convertible', True)

הוספת עמודות ל-dataframe

 

8. כיצד להוסיף תנאים פשוטים לסט הנתונים?

בדוגמה זו נוסיף עמודה expensive המכילה ערכים בוליאניים. במידה והמחיר גבוה מ-90000 הערך יהיה True.

כדי שזה יעבוד נשתמש במתודה where של ספריית numpy.

import numpy as np
df['expensive'] = np.where(df['price']>=90000, True, False)

 

9. כיצד לחלק את הנתונים לקבוצות?

בדוגמה זו אנחנו מעוניינים לחלק את הנתונים ל-3 קבוצות לפי מחיר:

bins = [0, 40000, 60000, 90000]
names = ['Cheap', 'Medium', 'Expensive']

df['price_point'] = pd.cut(df.price, bins, labels=names)

 

10. כיצד להפעיל פונקציה על עמודה?

כדי להפעיל פונקציה על עמודה משתמשים במתודה apply:

def get_company(s):
  if s.find('BMW') > -1:
    return 'BMW'
  elif s.find('Audi') > -1:
    return 'Audi'
  else:
    return 'Unknown'

df['company'] = df.model.apply(get_company)

אפשר גם להשתמש בפונקציה אנונימית:

df['real_price'] = df.price.apply(lambda x: '$' + str(x))

 

11. כיצד לעבוד עם תאריכים?

מתחילים מהמרת המידע בעמודה לסוג datetime , ואז משתמשים בתכונות של dt.

לדוגמה, פונקציה שממירה תאריך סטנדרטי ל"ישראלי":

def to_israeli_date(d):
  date = d.to_pydatetime()

  day   = date.day
  month = date.month
  year  = date.year

  return '%s.%s.%s' % (day, month, year)

df['israeli_date'] = df.date.apply(to_israeli_date)

 

12. כיצד לבחור תא או טווח של ערכים?

אפשר לבחור שורה לפי מספר אינדקס:

df.loc[2]

או לבחור טווח של שורות:

df.loc[2:8]

וכדי לבחור תא מסוים:

df.loc[2,'model']

וניתן לחצות את סט הנתונים, לדוגמה, עד שורה 10 ומשורה 10:

train = df.loc[:10, ['model']]
test = df.loc[10:, ['model']]

 

13. כיצד להפעיל לוגיקה לסינון הנתונים?

נאמר שאנחנו מעוניינים לסנן את השורות שבהם המחיר גבוה מ-3000

filtered_data = df[df.price > 30000]

ניתן לבצע לוגיקה מורכבת יותר באמצעות & או |

filtered_data = df[(df.price > 30000) & (df.price <= 40000)]

 

filtered_data = df[(df.price < 30000) | (df.price >= 15000)]

 

14. כיצד לקבל את הנתונים הייחודיים בלבד של עמודה?

כדי לקבל את הנתונים הייחודיים בעמודה משתמשים ב-unique:

df.company.unique()
array(['BMW', 'Audi'], dtype=object)

 

15. כיצד לסדר את השורות בהתאם לעמודה מסוימת?

הפקודה sort_values משמשת לסידור סט הנתונים לפי עמודה (בסדר יורד או עולה):

df.sort_values('price', ascending=True)

 

16. כיצד לחבר dataframes?

ניתן לחבר dataframes כל עוד המבנה הוא זהה.

כדי לחבר את השורות אנכית:

pd.concat([df_1, df_2], axis=0)

כדי לחבר את השורות אופקית:

pd.concat([df_1, df_2], axis=1)

אפשרות נוספת היא לחבר על בסיס של אינדקס משותף כמו JOIN ב-SQL.

merged_df = df_1.merge(df_2, how='left', on='unique_id')

 

17. כיצד למצוא קורלציה?

כדי למצוא את הקורלציה בין עמודות שמכילות סט נתונים המשכי (גובה, מחיר):

df.corr()['price'].sort_values()

 

18. כיצד לקחת רק חלק מהעמודות?

כדי להגדיר את סט הנתונים רק על חלק מהעמודות:

df1 = df[['model', 'price']]

 

לכל המדריכים בנושא של למידת מכונה

 

אהבתם? לא אהבתם? דרגו!

0 הצבעות, ממוצע 0 מתוך 5 כוכבים

 

הוסף תגובה חדשה

 

= 4 + 7