دسترسی به عناصر دیتافریم (Dataframe) با اپراتورهای منطقی روی ستونها وسطرها
مرتب سازی عناصر دیتافریم (Dataframe) در کتابخانه Pandas
کار با مقادیر ناموجود یا تهی در دیتافریم (Dataframe)
Pandas از کتابخانههای متن بازی است که برای کار با داده هایی با ساختار رابطه ای (rational) یا برچسب گذاری شده ایجاد شده است. این کتابخانه ساختار دادههای متنوعی به همراه امکان اعمال عملیات عددی روی این دادهها را فراهم میکند وبه خوبی میتواند با سریهای زمانی کار کند. Pandas بر مبنای کتابخانه ی NumPy ساخته شده است و بسیاری از ساختارهای NumPy در این کتابخانه استفاده شده و گسترش یافته اند. در ادامه به آموزش کتابخانه Pandas میپردازیم. مزایای این کتابخانه شامل موارد زیر است:
سرعت و کارایی بالا در کار با داده ها.
امکان بارگذاری دادهها از فایلهای متفاوت.
کنترل راحت ویژگی هایی که مقداردهی نشده اند. (به عبارتی این مقادیر با NaN مقداردهی شده اند.)
قابلیت تغییر اندازه: ستون هایی میتوانند به دادهها اضافه شوند و یا از آنها حذف شوند.
ادغام (merge) و اتصال (join) مجموعه داده ها.
تغییر شکل داده به طور منعطف.
فراهم کردن امکان کار با سریهای زمانی.
امکان گروه بندی دادهها با توجه به اهداف کاربردی.
محیطی که در این مقاله برای کار انتخاب کرده ایم JuputerNotebook است که از توزیع آناکوندا استفاده شده است. برای توضیحات بیشتر و نحوه ی نصب آن به این مقاله مراجعه کنید.
ساختار دادهها در کتابخانه Pandas
به طور کلی کتابخانه Pandas دارای دو دسته ساختار داده است:
سری یا Series
دیتافریم یا DataFrame
البته نوع سومی تحت عنوان Panel هم بود که در نسخههای جدید منسوخ شده است.
نوع داده ی Series
سری یک آرایه ی یک بُعدی و برچسب گذاری شده است (دارای ایندکس برای سطرهاست) که میتواند انواع مختلف داده (عدد صحیح، اعشاری، رشته، آبجکتهای پایتون و...) را در خود نگه دارد.
به محور برچسبها اندیس یا index میگویند. سریهای کتابخانه Pandas مثل یک ستون از صفحه ی اکسل است. اندیسها باید منحصر به فرد باشند و هر اندیس فقط به یک عنصر اشاره کند. منبع داده برای سریهای کتابخانه Pandas میتواند پایگاه داده ی SQL، فایلهای CSV و اکسل باشد. نوع داده ی ورودی سری نیز میتواند به شکل لیست، تاپل و دیکشنری و عدد اسکالر باشد.
ایجاد یک سری: یک سری در پانداس به شکل زیر تعریف میشود:
pandas.Series( data, index, dtype, copy)
که در آن:
data: داده ی ورودی است که میتواند به شکل آرایه، لیست، دیکشنری یا عدد باشد.
index: مقدار اندیس یا برچسب اختصاصی به هر سطر است که به طور پیش فرض از اعداد 0 تا n-1 است(n: تعداد داده هاست) و البته میتواند هر مقدار عددی یا رشته ای دلخواه را بگیرد.
dtype: نوع داده ی اختصاصی به ستون داده است که اگر مقدار ندهیم، خودش از دادهها نوع شان را استنباط میکند.
copy: کپی از سری ایجاد میکند و مقدار پیش فرض False دارد.
در مثال زیر نحوه ی ایجاد یک سری با استفاده از آرایه را میبینیم.
import pandas as pd
import numpy as np
# Creating empty series
ser = pd.Series()
print(ser)
# simple array
data = np.array(['g', 'e', 'e', 'k', 's'])
ser = pd.Series(data)
print(ser)
Series([], dtype: float64) 0 g 1 e 2 e 3 k 4 s dtype: object
اگر مقدار ستون اندیس را مقداردهی نکنیم مانند مثال بالا به طور پیش فرض از صفر شروع به مقداردهی اندیسها میکند. میتوانیم ستون اندیسها را با عبارت index=[ ]نام گذاری کنیم:
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
a 1.0 b 2.0 c 3.0 dtype: float64
برای مشاهده ی دادههای یک سری از دستور values استفاده میکنیم و با index اندیسها را استخراج میکنیم:
داده ی ورودی یک سری میتواند به شکل دیکشنری نیز باشد. کلیدهای دیکشنری به طور پیش فرض در نقش ستون اندیسها ظاهر میشوند و اگر مقدار index به عنوان ورودی به کد داده شود، دادههای دیکشنری در مقابل اندیس هایی ظاهر میشوند که آن اندیس با مقدار کلید داده در دیکشنری برابر باشد.
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print (s)
سری خروجی به شکل زیر است:
a 0.0 b 1.0 c 2.0 dtype: float64
می توانیم ستون اندیس را خودمان مقدار دهی کنیم:
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print (s)
b 1.0 c 2.0 d NaN a 0.0 dtype: float64
نکته: اگر داده به صورت دیکشنری باشد و اندیس سری را خودمان تعریف کنیم، آن اندیسی که در داخل کلیدهای دیکشنری نباشد مقدار NAN میگیرد. (مثل اندیس d در مثال بالا)
انتخاب و دستیابی به عناصر سری با مکان داده
می توان به عناصر با شماره ی اندیس آنها و یا نام اندیس آنها در داخل براکت [ ] دسترسی داشت. در مثال زیر پنج عنصر اول را انتخاب میکنیم.
# import pandas and numpy
import pandas as pd
import numpy as np
# creating simple array
data = np.array(['g','e','e','k','s','f', 'o','r','g','e','e','k','s'])
ser = pd.Series(data)
#retrieve the first element
print(ser[:5])
0 g
1 e
2 e
3 k
4 s
dtype: object
در مثال زیر هم به کمک برچسب اندیس به داده دسترسی داریم:
# import pandas and numpy
import pandas as pd
import numpy as np
# creating simple array
data = np.array(['g','e','e','k','s','f', 'o','r','g','e','e','k','s'])
ser = pd.Series(data,index=[10,11,12,13,14,15,16,17,18,19,20,21,22])
# accessing a element using index element
print(ser[16])
o
اندیس دهی به داده میتواند به معنای انتخاب زیرمجموعه ای از داده باشد. در مثال زیر ستونی با نام Name از یک فایل csv را انتخاب میکنیم و با تابع( head(10 به ده عنصر ابتدایی سری، دست مییابیم:
# importing pandas module
import pandas as pd
# making data frame
df = pd.read_csv("nba.csv")
ser = pd.Series(df['Name'])
data = ser.head(10)
data
برای دستیابی به عناصر با اندیس 3 و 4 و 5 دستور زیر را مینویسیم:
# using indexing operator
data[3:6]
انتخاب عناصر سری با دستور loc
می توان عدد یا برچسب اندیسهای مورد نظر را داخل براکت مقابل [loc[a:b قرار داد. توجه کنید که در اندیس دهی با loc، عدد آخر یعنی b درنظر گرفته میشود. به این مثال توجه کنید:
data.loc[3:6]
انتخاب عناصر سری با دستور iloc
دستور iloc مشابه loc است با این تفاوت که در [iloc[a:b اندیسها فقط باید عددی باشند و داده ی مربوط به اندیس عدد b نیز جزو عناصر انتخابی نخواهد بود، همان طور که در کد زیر مشاهده میکنید، عنصر با اندیس 6 جزو خروجی نیست:
# using .iloc[] function
data.iloc[3:6]
اجرای عملیات باینری روی سری ها
عملیات باینری مثل جمع و تفریق و ... را میتوان روی سریها انجام داد:
# importing pandas module
import pandas as pd
# creating a series
data = pd.Series([5, 2, 3,7], index=['a', 'b', 'c', 'd'])
print(data)
# creating a series
data1 = pd.Series([1, 6, 4, 9], index=['a', 'b', 'd', 'e'])
print(data1)
دو سری data و data1 را داریم:
a 5
b 2
c 3
d 7
dtype: int64
a 1
b 6
d 4
e 9
dtype: int64
حال برای جمع data و data1 از دستور add استفاده میکنیم:
data.add(data1, fill_value=0)
a 6.0
b 8.0
c 3.0
d 11.0
e 9.0
dtype: float64
سایر عملیات دودویی مثل .sub، .mul، .div،.pow و.... نیز وحود دارد که برای مطالعه ی بیشتر میتوانید به داکیومنت کتابخانه Pandas مراجعه کنید.
دیتافریم (Dataframe) در کتابخانه Pandas
دیتافریم (Dataframe) یک ساختار داده ی دو بعُدی است و دادهها شامل سطر(یا همان index) و ستون (یا همان columns) است و ساختاری رابطه ای است و هر تعداد داده میتوانیم در آن ذخیره کنیم و انواع عملیات محاسباتی و رابطه ای را همچون انتخاب، اتصال و گروه بندی را روی آن انجام دهیم.
یک دیتافریم (Dataframe) در کتابخانه Pandas (پانداس) به شکل زیر تعریف میشود:
data: داده ی ورودی است که میتواند لیست، آرایه، مقدار ثابت، دیکشنری و یا یک دیتافریم (Dataframe) باشد.
index: برای برچسب دهی به سطرها استفاده میشود و اگر مقداری برایش تعریف نشود به طور خودکار از عدد 0 تا n-1 را که n تعداد داده هاست را، میگیرد.
columns: برای برچسب دهی به ستونها استفاده میشود و اگر مقداری برایش تعریف نشود به طور خودکار از عدد 0 تا n-1 را که n تعداد ویژگی یا ستون هاست را، میگیرد.
dtype: نوع ستونها را برمی گرداند.
copy: اگر مقدارش True باشد از دادهها کپی ایجاد میکند، اما مقدار پیش فرض آن False است.
دیتافریم (Dataframe) در کتابخانه Pandas (پانداس)، به چند شکل مختلف میتواند ایجاد شود: 1.ایجاد دیتافریم (Dataframe) خالی یک دیتافریم (Dataframe) اولیه میتواند شامل هیچ مقداری نباشد و تنها با متد DataFrame آن را ایجاد کنیم:
# import pandas as pd
import pandas as pd
# Calling DataFrame constructor
df = pd.DataFrame()
print(df)
Empty DataFrame Columns: [] Index: []
2. ایجاد دیتافریم (Dataframe) با لیست داده ی دیتافریم (Dataframe) میتواند یک لیست یا لیستهای تودرتو باشد:
# import pandas as pd
import pandas as pd
# list of strings
lst = ['this', 'is', 'a', 'practial',
'article', 'for', 'Pandas']
# Calling DataFrame constructor on list
df = pd.DataFrame(lst)
print(df)
0
0 this
1 is
2 a
3 practial
4 article
5 for
6 Pandas
نکته: پیش از ادامه ی بقیه ی مطالب، یادآور میشویم که در دیتافریم (Dataframe) هم مانند سریها میتوان ویژگی مرتبط با سطرها و ستونها را مقداردهی کرد.(مقادیر عددی یا رشته ای به index و columns داد.) اما اگر مقداردهی نکنیم به طور پیش فرض عددی و با شروع از صفر مقداردهی میشوند ((numpy.arrange(n :از 0 تا n-1). مثال زیر را ببینید:
# import pandas as pd
import pandas as pd
# list of strings
lst = ['this', 'is', 'a', 'practical',
'article', 'for', 'Pandas']
# Calling DataFrame constructor on list
df = pd.DataFrame(lst, index=['row1','row2','row3','row4','row5','row6','row7'], columns=['col1'])
print(df)
col1
row1 this
row2 is
row3 a
row4 practical
row5 article
row6 for
row7 Pandas
3- ایجاد دیتافریم (Dataframe) با دیکشنری
برای اینکه بتوانیم یک دیتافریم (Dataframe) با داده ای از جنس دیکشنری ایجاد کنیم که مقدار اختصاصی به هر کلید از نوع آرایه یا لیست است، باید طول این لیست یا آرایهها با هم برابر باشند. (اگر index را خودمان مقداردهی کنیم این مقدار باید برابر طول آرایه یا لیست باشد.). کلیدهای دیکشنری برای ستونهای دیتافریم (Dataframe) در نظر گرفته میشوند.
# Python code demonstrate creating
# DataFrame from dict narray / lists
# By default addresses.
import pandas as pd
# intialise data of lists.
data = {'Name':['Tom', 'nick', 'krish', 'jack'], 'Age':[20, 21, 19, 18]}
# Create DataFrame
df = pd.DataFrame(data)
# Print the output.
print(df)
خروجی این کد دیتافریمی (Dataframe) به شکل زیر است:
Name Age
0 Tom 20
1 nick 21
2 krish 19
3 jack 18
کار با سطرها و ستونها در دیتافریم (Dataframe)
می توان بر روی دیتافریم (Dataframe)ها عملیاتی چون انتخاب، حذف، افزودن و تغییر نام سطرها و ستونها را انجام داد.
انتخاب ستون ها: برای انتخاب ستونها میتوان از نام آنها استفاده کرد. در کد زیر دیتافریمی (Dataframe) با نام df ایجاد میکنیم و سپس ستونهای Name و Qualification را انتخاب میکنیم.
# Import pandas package
import pandas as pd
# Define a dictionary containing employee data
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Delhi', 'Kanpur', 'Allahabad', 'Kannauj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data)
# select two columns
print(df[['Name', 'Qualification']])
Name Qualification
0 Jai Msc
1 Princi MA
2 Gaurav MCA
3 Anuj Phd
انتخاب سطرها: سطرهای مورد نظر را میتوان با دستور loc یا iloc یا ix انتخاب کرد و البته همان طور که در قسمت Series گفته شد برای انتخاب سطر با iloc تنها از شماره ی برچسب اندیس میتوان استفاده کرد. دادههای زیر را در نظر بگیرید:
# Import pandas package
import pandas as pd
# Define a dictionary containing employee data
data = {'Name':['Jai', 'Princi', 'Gaurav', 'Anuj'],
'Age':[27, 24, 22, 32],
'Address':['Delhi', 'Kanpur', 'Allahabad', 'Kannauj'],
'Qualification':['Msc', 'MA', 'MCA', 'Phd']}
# Convert the dictionary into DataFrame
df = pd.DataFrame(data,index=('Person1','Person2','Person3','Person4'))
df
دیتافریم (Dataframe) ما در این کد به شکل زیر است:
Name
Age
Address
Qualification
Person1
Jai
27
Delhi
Msc
Person2
Princi
24
Kanpur
MA
Person3
Gaurav
22
Allahabad
MCA
Person4
Anuj
32
Kannauj
Phd
حال اگر بخواهیم سطر اول را انتخاب کنیم، با یکی از دو دستور زیر این کار را میتوانیم انجام دهیم:
#with loc
df.loc[['Person1']]
#with iloc
df.iloc[[0]]
که خروجی هر دو کد یکسان است:
Name
Age
Address
Qualification
Person1
Jai
27
Delhi
Msc
نکته:
یادآوری میکنیم که iloc تنها با اندیسهای عددی کار میکند و متد loc با اندیس تعریف شده در جدول.
به دو جفت براکت کنار هر متد دقت کنید: اگر تنها یک جفت براکت بگذاریم خروجی به شکل ستونی زیر چاپ میشود:
Name Jai Age 27 Address Delhi Qualification Msc Name: Person1, dtype: object
اگر بخواهیم دو سطر اول و دوم را انتخاب کنیم مانند کد زیر عمل میکنیم:
#with loc
df.loc['Person1':'Person2']
#or
df.loc[['Person1','Person2']]
#with iloc
df.iloc[0:2]
Name
Age
Address
Qualification
Person1
Jai
27
Delhi
Msc
Person2
Princi
24
Kanpur
MA
و برای انتخاب سطر اول و اول و ستون دوم و سوم:
#with loc
df.loc['Person1':'Person2','Age':'Address']
#or
df.loc[['Person1','Person2'],['Age','Address']]
#with iloc
df.iloc[0:2,1:3]
Age
Address
Person1
27
Delhi
Person2
24
Kanpur
نکته: اگر ایندکس سطرها به صورت عددی بود، loc را مانند iloc مینویسیم با این تفاوت که در loc عدد اندیس آخر را درنظر میگیریم. یعنی مثلاً برای انتخاب سطر اول و دوم دستور را به صورت [loc[0:1 مینویسیم، درحالی که برای iloc به شکل [0:2]iloc است.
دسترسی به دیتافریم (Dataframe) با اندیس دهی بولین
برای دسترسی به دیتافریم (Dataframe) با اندیس بولین، باید دیتافریمها (Dataframe) را با اندیس بولین ایجاد کنیم. یعنی دیتافریمی (Dataframe) با اندیس هایی که مقادیر آن True یا False باشد. به طور مثال:
# importing pandas as pd
import pandas as pd
# dictionary of lists
dict = {'name':["aparna", "pankaj", "sudhir", "Geeku"],
'degree': ["MBA", "BCA", "M.Tech", "MBA"],
'score':[90, 40, 80, 98]}
df = pd.DataFrame(dict, index = [True, False, True, False])
print(df)
شکل این دیتافریم (Dataframe) به صورت زیر است:
name degree score
True aparna MBA 90
False pankaj BCA 40
True sudhir M.Tech 80
False Geeku MBA 98
دسترسی به عناصر دیتافریم (Dataframe) با اندیس بولین همچون سایر دیتافریمها (Dataframe) به یکی از روشهای loc و iloc است. برای دسترسی با loc مقدار True یا False را به عنوان پارامتر ورودی ارسال میکنیم.
# importing pandas as pd
import pandas as pd
# dictionary of lists
dict = {'name':["aparna", "pankaj", "sudhir", "Geeku"],
'degree': ["MBA", "BCA", "M.Tech", "MBA"],
'score':[90, 40, 80, 98]}
# creating a dataframe with boolean index
df = pd.DataFrame(dict, index = [True, False, True, False])
# accessing a dataframe using .loc[] function
print(df.loc[True])
name degree score
True aparna MBA 90
True sudhir M.Tech 80
همان طور که قبلاً گفته شد، iloc تنها مقادیر عددی را به عنوان پارامتر ورودی میپذیرد، پس در نتیجه مقدار Boolean را نمیتوان به آن داد.
دسترسی به عناصر دیتافریم (Dataframe) با اپراتورهای منطقی روی ستونها وسطرها
می توان برای دسترسی به عناصر برمبنای مقادیرشان به کمک اپراتورهای منطقی همچون ==، <=، >= و != فیلترهایی تعریف کرد. خروجی چنین فیلترهایی مجموعه ای بولین با مقادیر True و False است.
# importing pandas as pd
import pandas as pd
# dictionary of lists
dict = {'name':["aparna", "pankaj", "sudhir", "Geeku"],
'degree': ["BCA", "BCA", "M.Tech", "BCA"],
'score':[90, 40, 80, 98]}
# creating a dataframe
df = pd.DataFrame(dict)
# using a comparsion operator for filtering of data
print(df['degree'] == 'BCA')
تمامی پارامترها به جز by دارای مقادیر پیش فرض اند.
by: نام یک یا مجموعه ای از ستونها برای مرتب سازی دادهها بر مبنای آن ستونها است.
axis: عدد 0 یا عبارت 'index' برای سطر و 1 یا 'columns' برای ستون.
ascending: یک مقدار بولین که اگر True بود صعودی، و اگر False بود نزولی مرتب میکند.
inplace: یک مقدار بولین است. اگر True بود در دیتافریم (Dataframe) انتقالی به تابع، تغییراتی ایجاد میکند.
kind: یک مقدار رشته ای است که میتواند سه مقدار 'quicksort'، 'mergesort' و یا 'heapsort' را بگیرد و الگوریتم مرتب سازی بر اساس آن عمل کند.
na_position: میتواند یکی از دو مقدار رشته ای 'last' یا 'first' را بگیرد و بر اساس آن تعیین کند که مکان مقادیر NAN یا همان تهی، پس از مرتب سازی در ابتدای جدول قرار گیرد یا در انتهای آن.
دیتافریم (Dataframe) برگشت داده شده از تابع مرتب سازی، همان ابعاد و shape دیتافریم (Dataframe) اولیه را دارد. فرض کنید دیتافریمی (Dataframe) با نام data به شکل زیر داریم و میخواهیم براساس ستون name سطرها را مرتب کنیم.
name
Age
0
John
25
1
Smith
30
2
Paul
50
3
Adam
26
4
Smith
11
# importing pandas package
import pandas as pd
# sorting data frame by name
data.sort_values("name", axis = 0, ascending = True,
inplace = True, na_position ='last')
# display
data
name
Age
3
Adam
26
0
John
25
2
Paul
50
1
Smith
30
4
Smith
11
کار با مقادیر ناموجود یا تهی در دیتافریم (Dataframe)
داده ی ناموجود یا تهی (Missing Values) زمانی رخ میدهد که یک یا چند آیتم مقداردهی نشده باشند و یا اطلاعاتی در خصوص آنها در دست نباشد. داده ی ناموجود در تحلیل دادههای سناریوهای واقعی مسأله ی مهمی است. در پانداس از آن تحت عنوان NA NotAvailible نیز یاد میشود.
کنترل مقادیر ناموجود با is null و not null
برای کنترل مقادیر ناموجود در دیتافریم (Dataframe) کتابخانه pandas (پانداس) میتوانیم از is null و not null استفاده کنیم. هردو تابع در کنترل اینکه آیا مقدار یک آیتم NAN هست یا نه؛ کمک میکنند. این توابع در سریها هم میتوانند برای یافتن مقادیر NAN به کار گرفته شوند. خروجی این توابع مقادیر بولین است.
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
'Second Score': [30, 45, 56, np.nan],
'Third Score':[np.nan, 40, 80, 98]}
# creating a dataframe from list
df = pd.DataFrame(dict)
# using isnull() function
df.isnull()
First Score
Second Score
Third Score
0
False
False
True
1
False
False
False
2
True
False
False
3
False
True
False
مقداردهی مقادیر ناموجود با fillna، replace و interpolate
به منظور پرکردن و مقداردهی مقادیر تهی در دیتابیس از توابع fllna، replace و interpolate استفاده میکنیم که این توابع مقادیر NAN را با مقادیر تولیدی خود جایگزین میکنند. در کد زیر به کمک متد fillna مقادیر تهی را با صفر جایگزین میکنیم.
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
'Second Score': [30, 45, 56, np.nan],
'Third Score':[np.nan, 40, 80, 98]}
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
# filling missing value using fillna()
df.fillna(0)
First Score
Second Score
Third Score
0
100.0
30.0
0.0
1
90.0
45.0
40.0
2
0.0
56.0
80.0
3
95.0
0.0
98.0
حذف مقادیر null با تابع dropna
به منظور حذف مقادیر NAN از دیتافریم (Dataframe) از تابع dropna استفاده میکنیم. این تابع سطرها و ستونهای NAN را با شیوههای مختلف حذف میکند. دیتافریم (Dataframe) df را به شکل زیر داریم:
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
'Second Score': [30, np.nan, 45, 56],
'Third Score':[52, 40, 80, 98],
'Fourth Score':[np.nan, np.nan, np.nan, 65]}
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
df
First Score
Second Score
Third Score
Fourth Score
0
100.0
30.0
52
NaN
1
90.0
NaN
40
NaN
2
NaN
45.0
80
NaN
3
95.0
56.0
98
65.0
در کد زیر سطرهایی که حداقل یک مقدار NAN دارند را حذف میکند.
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, 90, np.nan, 95],
'Second Score': [30, np.nan, 45, 56],
'Third Score':[52, 40, 80, 98],
'Fourth Score':[np.nan, np.nan, np.nan, 65]}
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
# using dropna() function
df.dropna()
خروجی به شکل زیر خواهد بود:
First Score
Second Score
Third Score
Fourth Score
3
95.0
56.0
98
65.0
حال کدی مینویسیم که با آن سطری را که همه ی عناصر آن صفر باشد را حذف کنیم. فرض کنید دیتافریم (Dataframe) زیر را داریم که سطر دوم آن همگی NAN است:
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, np.nan, np.nan, 95],
'Second Score': [30, np.nan, 45, 56],
'Third Score':[52, np.nan, 80, 98],
'Fourth Score':[np.nan, np.nan, np.nan, 65]}
df = pd.DataFrame(dict)
# using dropna() function
df.dropna(how = 'all')
خروجی حاصل به شکل زیر است:
First Score
Second Score
Third Score
Fourth Score
0
100.0
30.0
52.0
NaN
2
NaN
45.0
80.0
NaN
3
95.0
56.0
98.0
65.0
حذف ستونی با حداقل یک مقدار null
مجموعه داده ی زیر را در نظر بگیرید:
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, np.nan, np.nan, 95],
'Second Score': [30, np.nan, 45, 56],
'Third Score':[52, np.nan, 80, 98],
'Fourth Score':[60, 67, 68, 65]}
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
df
First Score
Second Score
Third Score
Fourth Score
0
100.0
30.0
52.0
60
1
NaN
NaN
NaN
67
2
NaN
45.0
80.0
68
3
95.0
56.0
98.0
65
دستور( dropna(axis=1 منجر به حذف ستونهای اول و دوم وسوم خواهد شد. (وقتی axis را برابر 1 قرار میدهیم یعنی متد روی ستونها کار میکند و اگر صفر باشد روی سطرها):
# importing pandas as pd
import pandas as pd
# importing numpy as np
import numpy as np
# dictionary of lists
dict = {'First Score':[100, np.nan, np.nan, 95],
'Second Score': [30, np.nan, 45, 56],
'Third Score':[52, np.nan, 80, 98],
'Fourth Score':[60, 67, 68, 65]}
# creating a dataframe from dictionary
df = pd.DataFrame(dict)
# using dropna() function
df.dropna(axis = 1)
Fourth Score
0
60
1
67
2
68
3
65
جمع بندی:
در این مقاله به معرفی کتابخانه Pandas در پایتون پرداختیم. پانداس یک کتابخانه ی متن باز است که برای کار بر روی دادههای برچسب دار و رابطه ای طراحی شده است. چنین ساختار داده ای باعث میشود تا به کمک عملیات تعریف شده بر روی دادههای رابطه ای تحلیل سودمندی روی دادهها انجام داد. این کتابخانه به خاطر قابلیت سرعت و قدرت خوب پردازشی در علم داده بسیار پرکاربرد است و توابع و متدهای فراوانی را فراهم کرده است. با مطالعه ی این مقاله و انجام مثالهای آن با این فریم ورک آشنا شده و قادر به شروع انجام پروژه ی خود خواهید بود.
اگر دوست داری به یک متخصص پایتون وب تبدیل بشی و در شرکتهای معتبر مشغول به کار با درآمد بالا بشی ، شرکت در دوره جامع آموزش پایتون را پیشنهاد میکنیم.
سلام ممنون از محتوای خوبتون
من اگه یک دیتایی داشته باشم که مقادیر ورودی به انبار و دیتایی داشته باشم که مقادیر خروجی از انبار باشن بخوام دیتایی بسازم که مقادیر خروجی به نسبت موجودی انبار (به معیار تاریخ) باشه چه نوع کدی باید بزنم؟
نازنین کریمی مقدم۰۹ دی ۱۴۰۲، ۱۲:۰۸
درود
معمولترین کار این هست که دیتای ورودی و خروجی رو در دو دیتافریم مختلف بریزید و این دو رو براساس تاریخ مرتب کنید. بعد هر عضو رو با نظیرش مقایسه کنید.
۱۸ فروردین ۱۴۰۲، ۱۱:۵۴
سلام متشکرم از آموزشتون.
چطور میتونم در یک ستون از دیتا فریم هر داده رو منهای داده قبلش کنم و در ستونی جدید قرار بدم؟
نازنین کریمی مقدم۱۹ فروردین ۱۴۰۲، ۱۵:۰۶
درود
باید از حلقه کمک بگیرید. <a href="https://stackoverflow.com/questions/47661395/adding-string-values-from-previous-row-to-next-row-in-pandas" target="_blank" rel="noopener nofollow ugc">این تاپیک</a> استک درمورد اضافه کردن مقدار هست به راحتی میتونید بجاش از منها استفاده کنید.
۰۵ دی ۱۴۰۱، ۱۱:۱۹
سلام و وقت بخیر
چطور میشه در ستون یک دیتا فریم داده هارو دوتا دوتا باهم مقایسه کرد و ماکسیمم آنهارو برگرداند؟
در کل چطور میشه با یک ستون از دیتا فریم کار کرد؟
نازنین کریمی مقدم۰۵ دی ۱۴۰۱، ۱۷:۲۴
درود
بله شدنی هست. پیشنهاد میکنم که <a href="https://stackoverflow.com/questions/64149670/how-to-compare-data-from-the-same-column-in-a-dataframe-pandas" target="_blank" rel="noopener nofollow ugc">این تاپیک استک</a> رو مطالعه کنید جوابتون به طور کامل درونش هست.
۲۶ بهمن ۱۴۰۰، ۰۶:۳۷
سلام من اگر بخوام دو تا دیتا فریم رو به هم وصل کنم یعنی مثلا اولی از ایندکس 0 تا 10 هست دومی 0 تا 5 میخوام دومی بیاد زیر اول و در کل یه دیتا فریم با ایندکس 0 تا 15 به من بده ، باید چ کنم ؟
نازنین کریمی مقدم۲۷ بهمن ۱۴۰۰، ۱۴:۲۴
درود
<a href="https://stackoverflow.com/questions/46755146/combine-dataframes-with-different-indexes-in-pandas" target="_blank" rel="noopener nofollow ugc">جوابهای این سوال</a> رو مطالعه کنید.
۱۵ دی ۱۴۰۰، ۱۴:۴۴
سلام.ممنون از نکات خوبتون...چطور میتونیم یک ستون از دیتافریم را در عددی ضرب یا تقسیم یا بطور کلی عملیات ریاضی روی آن انجام بدیم و بصورت inplace ستون نهایی در دیتافریم رو داشته باشیم؟
نازنین کریمی مقدم۱۷ دی ۱۴۰۰، ۱۳:۰۸
درود
1. فرض کنید یک ستون با نام b دارید و میخواید یک عملیات ریاضی : مثلا 10 واحد اضافه کنید. به اینصورت میشه: df['b'] + 10
2. اگر میخواید مقدار جدید جایگزین ستون قبلی بشه کافیه به این صورت بنویسید: df['b'] += 10 اگر نه که یک ستون جدید تعریف کنید و عبارت بالا رو بهش اساین کنید.
پایدار باشید
عماد۰۸ شهریور ۱۴۰۰، ۱۱:۲۸
سلام خسته نباشید اموزشتون عالی بود.ببخشید اون ستون سمت چپ که اعداد از 0 تا 3 توش هستن رو میشه از طریق کد پاک کرد؟با سپاس فراوان.
نازنین کریمی مقدم۱۳ شهریور ۱۴۰۰، ۲۰:۲۱
درود
به اون اعداد ایندکس گفته میشه و صرفا حالت نمایشی دارند. با این کد، میتونید در پرینت پاکشون کنید:
print(df.to_string(index=False))
محمد۰۱ اردیبهشت ۱۴۰۰، ۰۸:۴۴
عالی بود! ممنون.
زهره۲۱ شهریور ۱۳۹۹، ۰۶:۵۱
سلام
با تشکر از آموزش شما
این دستور کار نمیکنه نیاز به دو تا کروشه دیگه هم داره: ['df.loc['Person1','Person2
به این صورت کار میکنه:
[['df.loc[['Person1','Person2
المیرا ناصح۲۱ شهریور ۱۳۹۹، ۰۹:۳۴
سلام. ممنون از دقت و توجه شما. اصلاح شد.
ثمین۳۱ مرداد ۱۳۹۹، ۲۰:۵۰
عالییییی بود! ممنون
شروع رایگان یادگیری برنامه نویسی
کلیک کنید 👇
دوره الفبای برنامه نویسی با هدف انتخاب زبان برنامه نویسی مناسب برای شما و پاسخگویی به سوالات متداول در شروع یادگیری موقتا رایگان شد: