خیلی اوقات نتایج حاصل از محاسبات ریاضی برنامه به صورت اعشاری نمایش داده می شوند. مثلا برنامه ساده زیر را در نظر بگیرید که در پایتون نوشته شده است:

a=7
b=8
c=10
average=(a+b+c)/3
print (average)

در حالی که مقدار ذخیره شده در سه متغیر ما همگی اعداد صحیح هستند، اما مقدار میانگین آنها به صورت اعشاری محاسبه و نمایش داده خواهد شد:

8.333333333333334

اگر تمایل دارید که این عدد با اعشار کمتری محاسبه شود کافی است به کمک تابع round کد بالا را به این صورت تغییر دهید:

average=round((a+b+c)/3 , 2)
print (average)

در اینجا نتیجه به نزدیکترین عدد با دو رقم اعشار رند می شود:

8.33

و اگر بخواهید نتیجه هم مانند سه متغیر عدد صحیح باشد کافی است که تعداد رقم اعشار را در round تعیین نکنید:

average=round((a+b+c)/3)
print (average)
8

در قسمت اول دیدیم که چطور با اتفاده از کتابخانه pandas در پایتون می توانیم به محتویات یک فایل اکسل دسترسی پیدا کنیم و آن را نمایش دهیم. حالا قصد داریم این اطلاعات را برش بزنیم و فیلتر کنیم. اگر فایلهای اکسل و csv را دانلود نکرده اید از لینک های انتهای همین نوشته دانلود کنید و در فولدری که برنامه پایتون را ذخیره کرده اید قرار دهید.

در ابتدا دیتافریم را آماده می کنیم:

import pandas as pd
myfile = 'Salaries.xlsx'
mydata=pd.read_excel(myfile)

برش زدن داده ها در pandas

برای اینکه با تعدادی از ستونهای دلخواه موجود در دیتا فریم کار کنیم می توانیم مثل زیر عمل نماییم:

print(mydata[['Name','Level']].head(2))

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

     Name  Level
0    Ayda      5
1  Peyman      3

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

print(mydata[['Name','Level']][3:5])

در اینجا فقط ردیف های 3 و 4 نمایش داده می شوند:

      Name  Level
3  Behrooz      4
4    Simin      3

فیلتر کردن داده ها در pandas

فرض کنید که می خواهیم ببینیم چند نفر مالیات 10 درصدی و چند نفر مالیات 5 درصدی می پردازند. برای این کار از دستور زیر استفاده می کنیم:

print(mydata['Tax %'].value_counts())

با اجرای این دستور خواهیم دید که 7 نفر مالیات 5 درصدی و 3 نفر مالیات 10 درصدی می پردازند:

5     7
10    3
Name: Tax %, dtype: int64

برای پیدا کردن ردیف هایی که حقوق ماهانه کمتر از 5 دارند کافی است از دستور زیر استفاده کنیم:

lowincome=mydata['Salary']<5
print(lowincome)

که نتیجه را به شکل زیر نمایش خواهد داد:

0    False
1    False
2     True
3    False
4    False
5    False
6     True
7    False
8     True
9     True
Name: Salary, dtype: bool

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

lowincome=mydata['Salary']<5
print(mydata.loc[lowincome,:])

نتیجه به شکل دیگری ظاهر خواهد شد:

     Name  Salary  Tax %  Experience  Level
2  Farzad       4      5           2      2
6   Kaveh       3      5           5      2
8   Ehsan       2      5           1      1
9   Shiva       3      5           5      2

ترکیب فیلترها در pandas

فرض کنید که می خواهیم کارمندانی را که سابقه آنها بیشتر از 2 سال است ولی همچنان حقوقشان کمتر از 5 است را پیدا کنیم. به این منظور باید فیلترهایمان را با کمک & ترکیب کنیم:

lowincome=mydata['Salary']<5
highexperience=mydata['Experience']>2
print(mydata.loc[lowincome & highexperience,:])

نتیجه ترکیب فیلتر به این صورت خواهد بود:

    Name  Salary  Tax %  Experience  Level
6  Kaveh       3      5           5      2
9  Shiva       3      5           5      2

سایر عملوندهای منطقی که روی فیلترها کار می کنند عبارتند از | و ^ و ~ که به ترتیب معادل یا، یای انحصاری و نقیض هستند.

برای کار با داده ها در پایتون راه های مختلفی وجود دارد که یکی از بهترین آنها کتابخانه pandas است. در این قسمت قصد داریم به صورت پایه ای کاربا این کتابخانه را آموزش بدهیم. قبل از هر کاری لازم است کتابخانه های زیر را نصب کنیم.

Pandas

xlrd

برای شروع بد نیست فایلهای اکسل و csv که برای دانلود گذاشته شده را دانلود کنید تا بتوانید روی آن تمرین کنید. این فایلها شامل اطلاعاتی فرضی درباره 10 کارمند خیالی در یک شرکت خیالی هستند که شامل نام و حقوق ماهانه و درصد مالیات و سابقه کار و رتبه شغلی می شود.

برای شروع لازم است که این فایل را در فولدری که برنامه پایتون را ذخیره می کنید قرار دهید. سپس برای مشاهده محتویات فایل ابتدا آن را به شکل یک دیتافریم در می آوریم و سپس آن را نمایش می دهیم. برای باز کردن این فایل csv به صورت یک دیتافریم pandas از قطعه کد زیر استفاده می کنیم:

import pandas as pd
myfile = 'Salaries.csv'
mydata=pd.read_csv(myfile)
print(mydata)

نتیجه به صورت زیر نمایش داده می شود:

      Name  Salary  Tax %  Experience  Level
0     Ayda      12     10          10      5
1   Peyman       5      5           3      3
2   Farzad       4      5           2      2
3  Behrooz      11     10           7      4
4    Simin       7      5           5      3
5     Mona       5      5           2      3
6    Kaveh       3      5           5      2
7     Sara      30     10          14      6
8    Ehsan       2      5           1      1
9    Shiva       3      5           5      2 

حال اگر فایلی با همان اطلاعات اما با فرمت xlsx که در واقع همان فرمت اکسل است در اختیار داشته باشیم با قطعه کد زیر می توانیم آن را به صورت یک دیتافریم pandas استخراج کنیم:

import pandas as pd
myfile = 'Salaries.xlsx'
mydata=pd.read_excel(myfile)
print(mydata)

البته لازم است که قبل از این کار کتابخانه xlrd را نصب کنید تا با خطا مواجه نشوید.

گاهی اوقات اندازه دیتافریم بزرگ است و برای بررسی اینکه فرمت مناسبی دارد یا نه  کافی است که چند ردیف اول یا آخر آن را نمایش دهیم. برای این کار می توانیم از دستور head() یا tail() استفاده کنیم. در صورتی که درون پرانتز این دستورات هیچ عددی قرار ندهیم 5 سطر را نمایش می دهد. همچنین می توانیم با استفاده از دستور shape ابعاد دیتا فریم را مشاهده کنیم و به کمک دستور info() مشخصات مربوط به دیتافریم را ببینیم. در زیر کدی که این اطلاعات را نمایش می دهد قابل مشاهده است:

import pandas as pd
myfile = 'Salaries.xlsx'
mydata=pd.read_excel(myfile)
print(mydata.head(2))
print(mydata.tail(2))
print(mydata.shape)
print(mydata.info())

خروجی حاصل از اجرای این کد به شکل زیر خواهد بود:

     Name  Salary  Tax %  Experience  Level
0    Ayda      12     10          10      5
1  Peyman       5      5           3      3
    Name  Salary  Tax %  Experience  Level
8  Ehsan       2      5           1      1
9  Shiva       3      5           5      2
(10, 5)
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 5 columns):
 #   Column      Non-Null Count  Dtype 
---  ------      --------------  ----- 
 0   Name        10 non-null     object
 1   Salary      10 non-null     int64 
 2   Tax %       10 non-null     int64 
 3   Experience  10 non-null     int64 
 4   Level       10 non-null     int64 
dtypes: int64(4), object(1)
memory usage: 424.0+ bytes
None

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