آموزش پایتون- بخش پنجم- Pandas

بخش چهارم آموزش پایتون را با آموزش کتابخانه Numpy به پایان بردیم. در ادامه این قسمت بحث Pandas را پی میگیریم.

ابتدا کتابخانه ها را ایمپورت میکنیم:

import pandas as pd
import numpy as np

میخواهیم یک لیست برچسب دار بسازیم:

labels = ['a', 'b', 'c']
my_list = [10, 20, 30]
arr = np.array([10, 20, 30])
d = {'a': 10, 'b': 20, 'c': 30}

این کار را با کتابخانه pandas و Numpy و طرق دیگر با مشخص کردن data و Index انجام میدهیم:

# 1 - list
pd.Series(data = my_list , index = labels)

# 2 - numpy array
pd.Series(data = arr, index = labels)

#3 - dict
pd.Series(data = d)

#4
pd.Series(data = d, index = labels)

Working with Series

دیتای زیر مقادیر فروش در روزهای محتلف هفته را نشان میدهد:

sells1 = pd.Series([1000,2000,2500,1500],index = ['SAT','SUN','MON','TUE'])
sells2 = pd.Series([500,1100,2000,3500],index = ['SAT','SUN','THU', 'FRI'])

حال میخواهیم مقدار فروش در همه روزهای هفته را مشاهده کنیم(با شرط داشتن فروش در هر دو دسته sell1 و sell2):

sells1 + sells2
FRI       NaN
MON       NaN
SAT    1500.0
SUN    3100.0
THU       NaN
TUE       NaN
dtype: float64

DataFrames

میخواهیم یک ماتریس 6ردیفه در 4 ستون بسازیم و همچنین نام ردیف(ایندکس)و نام ستون ها را نیز در یک متغیر مستقل تعریف میکنیم.

arr = np.random.randn(6,4)
ind = ['A', 'B', 'C', 'D', 'E', 'F']
cols = ['W', 'X', 'Y', 'Z']
arr
array([[ 0.18634557,  0.61764637, -1.68146026, -0.74306913],
       [-1.11226964,  1.0265941 ,  0.12574059,  0.25364223],
       [-0.19876086, -0.46942428, -0.9216151 , -2.13352233],
       [ 1.14281602,  0.0407859 , -1.30831831, -0.46343872],
       [-0.24328887, -0.34948488,  0.43473536, -1.70888584],
       [-0.3089345 ,  1.12381186,  0.49135135, -0.4656304 ]])

اما مشاهده میشود این دیتا آن طور که مطلوب ماست مشاهده نمیشود. چون در قالب دیتافریم قرار ندارد.

Create DataFrames

برای ساخت دیتا فریم باید data و columns و شاخص index را تعریف کنیم:

# 1- numpy array
pd.DataFrame(data = arr , index = ind, columns = cols )
	

تبدیل دیتافریم:

نمونه 1: لیستی از دیکشنری ها

ابتدا لیستی از دیکشنری ها را به صورت زیر تعریف میکنیم:

l_dict = 
[{'W': 100,'X': 200, 'Y': 300, 'Z': 350},
 {'W': 104,'X': 230, 'Y': 400, 'Z': 280}, 
{'W': 1000,'X': 450, 'Y': 400, 'Z': 310}]

با دستور زیر لییست فوق را به دیتافریم تبدیل میکنیم. ضمن اینکه شاخص a,b,c را نیز به آن می افزاییم:

pd.DataFrame(data = l_dict , index = ['A', 'B', 'C'])

نمونه 2: دیکشنری از لیستها

نمونه زیر را داریم که دیکشنری از لیست ها است:

d_list =
 {'W':[100, 104, 1000], 
'X':[200, 230, 450], 
'Y':[300, 400, 400], 
'Z':[350, 280, 310]}

این مورد را نیز میتوان با دستور زیر به دیتافریم تبدیل نمود:

pd.DataFrame(data = d_list, index = ['a', 'b', 'c'])

getting info about DF

دستور زیر به طور پیشفرض 5 ردیف اول از دیتافریم را برمیگردارند مگر اینکه خودمان تعیین کنیم که چند ردیف را برگرداند:

df.head(2)

#last 5 rows
df.tail()

دستور زیر اطلاعاتی در مورد کمینه ، بیشینه، مد ، میانه و … را به ما برمیگرداند:

df.describe()

دستور زیر اطلاعاتی در مورد تنوع و تعداد و نوع داده ها به ما میدهد:

df.info()

DataFrame indexing

فرض که دیتای ما به صورت زیر باشد:

با دستور زیر میتوان یک ستون خاص آن را فرا خواند:

df['X']

و یا فراخواند دو ستون از آن:

df[['X', 'Y']]

اگر بخواهیم تنها یک ردیف با ایندکس خاص را مشاهده کنیم:

df.loc['A']

میخواهیم تنها ردیفهای A, C ,D را مشاهده کنیم:

df.loc[['A', 'C', 'D']]

میخواهیم تک عنصر ردیف C و ستون X را مشاهده کنیم:

df.loc['C', 'X']

-0.4694242821694606

میخواهیم از ردیفC تنها عناصر مربوط به ستونX ,Y,Z را ببینیم:

df.loc['C', ['X','Y', 'Z']]

دیدن سطرها و ستونهای خاص:

df.loc[['C', 'F'], ['X', 'Z']]

دیدن سطهای با شاخص A تا D:

df.loc['A': 'D']

دیدن همه سطرها و ستونهای خاص:

df.loc['A': 'D'][['Y','W', 'Z']]

iloc

دستور iloc به ردیف نگاه میکند.

ابتدا نگاهی مجدد به دیتای خود می اندازیم:

مثال:

# iloc
df.iloc[3]

برگرداندن ردیف 1 و 2:

df.iloc[1:3]

نکته: دستور زیر نیز کاری مشابه دستور قبلی انجام میدهد با این تفاوت که سمت راست بازه inclusive است:

df.loc['B':'D']

ردیف 1تا 3 و ستون 1:

df.iloc[1:3, 1]

Subframes

مجددا به df نگاهی می اندازیم:

انتخاب سطرها و ستونهای دلخواه:

df.iloc[[0,2,5], [2, 3]]  # A, C, F,    col= Y, Z

نمایش فقط سطرهای 0 و 2:

df.iloc[[0,2]]

نمایش با تکرار:

df.iloc[[3,3, 3]]

Modifying DataFrames

دیتافریمی 6 در 4 که شاخص ردیف های آن نام 6 شهر باشد و ستونهای آن 4 کالای دیجیتال باشد و مقادیر ماتریس اعداد رندوم بین1000 تا 2000 باشد

df = pd.DataFrame(np.random.randint(1000,2000,(6,4)),\
                  index = ['Tehran', 'Shiraz', 'Yazd', 'Tabriz','Mashhad', 'Kerman'],\
                  columns = ['Laptop', 'Celphone', 'Camera', 'TV'])

تعریف کردن ردیفی که مجموع دستگاهای دیجیتال در هر شهر را نمایش دهد:

df['Sum'] = df['Laptop'] + df['Celphone'] + df['Camera'] + df['TV']

تعداد کتب موجود در شهر را به صورت اعداد رندوم بین 100 تا 2000 به دیتا فریم اضافه کنید:

df['Book'] = np.random.randint(100, 2000, 6)

ستون مربوط به TV را از دیتافریم حذف کنید:

# deleting
df.drop(['TV'], axis = 1)

نکته: مجددا df را نگاه کنیم میبینیم که ستون TV سر جای خودش است. زیرا از inplace=TRUE استفاده نکردیم

ردیف تهران را حذف کنید و (دیتای جدید بدون تهران تشکیل شود)

df.drop('Tehran', axis = 0)

ردیف yazd را حذف کنید:

df.drop(index = 'Yazd')

ستون TV را حذف کنید (روش 2)

df.drop(columns = 'TV')

دو ردیف دلخواه را حذف کنید:

df.drop(columns = ['TV', 'Camera'])

Renaming Columns

ابتدا یک دیتا فریم تشکیل میدهیم:

df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]})

با دستور زیر میتوان نام ستون ها را تغییر داد:

df.rename(columns = {'A': 'aa', 'B': 'bb'})

Renaming indeces

با دستور زیر میتوان نام شاخص ها را تغییر داد

df.rename(index = {0: 'X', 1: 'Y', 2: 'Z'})

# استعلام نام شاخص ها
df.index

# استعلام نام ستون ها
df.columns

Selection ( Query)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.