۵ تابع مفید پانداز در پایتون — راهنمای کاربردی

۵۳۵ بازدید
آخرین به‌روزرسانی: ۲۸ خرداد ۱۴۰۱
زمان مطالعه: ۵ دقیقه
۵ تابع مفید پانداز در پایتون — راهنمای کاربردی

در کارهای روزمره پردازش داده مربوط به پروژه‌های یادگیری ماشین و علوم داده، کتابخانه «پانداز» (Pandas) یکی از پرکاربردترین کتابخانه‌های پایتون محسوب می‌شود. این کتابخانه همچون کتابخانه Numpy بر حوزه علوم داده، یادگیری ماشین و برنامه‌نویسی هوش مصنوعی حکم‌فرمایی می‌کند و تابع‌های داخلی مفیدی دارد که برای کاربردهای مختلف مناسب است. در این مقاله به بررسی 5 تابع مفید پانداز در پایتون می‌پردازیم که موجب شده این کتابخانه چنین آوازه بلندی در میان دانشمندان داده و مهندسان یادگیری ماشین کسب کند.

تابع ()shift

فرض کنید در موقعیتی هستید که باید همه ردیف‌ها را در یک دیتافریم شیفت کنید و یا باید از قیمت قبلی یک سهم در یک دیتافریم استفاده کنید. یا ممکن است بخواهید یک دمای میانگین برای سه روز اخیر در یک دیتاست بسازیم. در هر صورت تابع shift() یک روش مناسب برای انجام همه این کارها محسوب می‌شود.

تابع shift()‎ در پانداز موجب جابجایی اندیس به تعداد پریودهای مطلوب می‌شود. این تابع یک پارامتر اسکالر می‌گیرد که «پریود» (Period) ‌نام دارد و نشان‌دهنده تعداد شیفت‌ها در محور مطلوب است. این تابع در زمان کار با داده‌های سری زمانی بسیار مفید واقع می‌شود. می‌توان از fill_value برای پر کردن فراتر از مقادیر کرانی استفاده کرد.

1import pandas as pd
2import numpy as np
3df = pd.DataFrame({'DATE': [1, 2, 3, 4, 5],
4                   'VOLUME': [100, 200, 300,400,500],
5                   'PRICE': [214, 234, 253,272,291]})
6print(df)
7  
8    DATE  VOLUME  PRICE
90     1     100    214
101     2     200    234
112     3     300    253
123     4     400    272
134     5     500    291
14df.shift(1)
15DATE  VOLUME  PRICE
160   NaN     NaN    NaN
171   1.0   100.0  214.0
182   2.0   200.0  234.0
193   3.0   300.0  253.0
204   4.0   400.0  272.0
21# with fill_Value = 0
22df.shift(1,fill_value=0)
23DATE  VOLUME  PRICE
240     0       0      0
251     1     100    214
262     2     200    234
273     3     300    253
284     4     400    272

5 تابع مفید پانداز در پایتون

اکنون اگر بخواهیم قیمت سهم قبلی را به صورت یک ستون جدید بگیریم، می‌توانیم از شیفت به صورت زیر استفاده کنیم:

1df['PREV_DAY_PRICE'] = df['PRICE'].shift(1,fill_value=0)
2print(df)
3DATE  VOLUME  PRICE  PREV_DAY_PRICE
40     1     100    214               0
51     2     200    234             214
62     3     300    253             234
73     4     400    272             253
84     5     500    291             272

بدین ترتیب می‌توانیم قیمت سهام میانگین را برای سه روز اخیر به صورت زیر محاسبه کرده و یک ستون فیچر جدید ایجاد کنیم:

1df['LAST_3_DAYS_AVE_PRICE'] = (df['PRICE'].shift(1,fill_value=0) + 
2                               df['PRICE'].shift(2,fill_value=0) + 
3                               df['PRICE'].shift(3,fill_value=0))/3

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

1DATE  VOLUME  PRICE     LAST_3_DAYS_AVE_PRICE
20     1     100    214               0.000000
31     2     200    234              71.333333
42     3     300    253             149.333333
53     4     400    272             233.666667
64     5     500    291             253.000000

حتی می‌توانیم پا را از این فراتر گذاشته و مقداری را از دوره زمانی بعد یا ردیف بعدی بگیریم:

df['TOMORROW_PRICE'] = df['PRICE'].shift(-1,fill_value=0)

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

1DATE  VOLUME  PRICE     TOMORROW_PRICE
20     1     100    214             234
31     2     200    234             253
42     3     300    253             272
53     4     400    272             291
64     5     500    291               0

برای کسب اطلاعات بیشتر در مورد گزینه‌ها و تنظیمات این تابع به مستندات رسمی پانداز (+) مراجعه کنید.

تابع ()value_counts

تابع ()value_counts در پانداز یک شیء بازگشت می‌دهد که شامل شمار مقادیر یکتا است. شی‌ء حاصل می‌تواند با ترتیب صعودی یا نزولی ذخیره شود و از طریق کنترل پارامتر، NA را در آن شامل یا استثنا کرد. در ادامه این تابع را با یک مثال عملی بررسی می‌کنیم. این تابع می‌تواند برای اندیس یا سری‌های پانداز مورد استفاده قرار گیرد.

5 تابع مفید پانداز در پایتون

1a = pd.Index([3,3,4,2,1,3, 1, 2, 3, 4, np.nan,4,6,7])
2a.value_counts()
3#Output
43.0    4
54.0    3
61.0    2
72.0    2
87.0    1
96.0    1
10dtype: int64

در ادامه مثالی از سری‌ها می‌بینید:

1#In
2b = pd.Series(['ab','bc','cd',1,'cd','cd','bc','ab','bc',1,2,3,2,3,np.nan,1,np.nan])
3b.value_counts()
4#Out
5bc    3
6cd    3
71     3
83     2
9ab    2
102     2
11dtype: int64

اما این گزینه می‌تواند به جای شمارش دفعات ظهور یک مقدار برای تقسیم اندیس در شماره مفروض دسته (bin)-های نیمه-باز نیز مورد استفاده قرار گیرد.

1#In
2a = pd.Index([3,3,4,2,1,3, 1, 2, 3, 4, np.nan,4,6,7])
3a.value_counts(bins=4)
4#Out
5(2.5, 4.0]      7
6(0.993, 2.5]    4
7(5.5, 7.0]      2
8(4.0, 5.5]      0
9dtype: int64

برای کسب اطلاعات بیشتر در مورد گزینه‌ها و تنظیمات این تابع به مستندات رسمی پانداز (+) مراجعه کنید.

تابع ()mask

متد ماسک یک کاربرد شرط if-else برای هر عنصر یک سری یا دیتافریم است. اگر Cond به صورت True باشد، در این صورت از مقدار Other (مقدار پیش‌فرض آن NaN است)، استفاده می‌کند؛ در غیر این صورت، مقدار اصلی را حفظ می‌کند. این متد ()mask کاملاً مشابه ()where است.

5 تابع مفید پانداز در پایتون

به دیتافریم زیر توجه کنید که می‌خواهیم علامت همه عناصری را که بر دو (بدون باقیمانده) بخش‌پذیر هستند، تغییر دهیم:

5 تابع مفید پانداز در پایتون

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

1df = pd.DataFrame(np.arange(15).reshape(-1, 3), columns=['A', 'B','C'])
2print(df)
3#Out
4    A   B   C
50   0   1   2
61   3   4   5
72   6   7   8
83   9  10  11
94  12  13  14
10#mask operation to check if element is divided by 2 without any remainder. If match change the sign of the element as original
11df.mask(df % 2 == 0,-df)
12#Out
13A   B   C
140   0   1  -2
151   3  -4   5
162  -6   7  -8
173   9 -10  11
184 -12  13 -14

برای کسب اطلاعات بیشتر در خصوص متد ()mask به مستندات رسمی پانداز (+) مراجعه کنید.

تابع ()nlargest

در اغلب موارد، با موقعیت‌هایی مواجه می‌شویم که باید 3 مقدار فوقانی یا پنج مقدار تحتانی برای یک سری یا دیتافریم به دست آوریم. برای نمونه فرض کنید می‌خواهیم سه دانشجوی برتر را بر اساس نمره نهایی بیابیم یا سه کاندیدای ضعیف را بر حسب کل آرای کسب کرده در یک انتخابات مشخص سازیم.

متدهای ()nlargest و ()nsmallest در پانداز بهترین راه‌حل برای چنین الزامات پردازش داده‌ای هستند. مثال زیر سه مورد از بیشترین قد افراد را از یک دیتافریم با 10 مشاهده نمایش می‌دهد:

5 تابع مفید پانداز در پایتون

1import pandas as pd
2import numpy as np
3df = pd.DataFrame({'HEIGHT': [170,78,99,160,160,130,155,70,70,20],
4                   'WEIGHT': [50,60,70,80,90,90,90,50,60,70]},
5                   index=['A','B','C','D','E','F','G','H','I','J'])
6print(df)
7HEIGHT  WEIGHT
8A     170      50
9B      78      60
10C      99      70
11D     160      80
12E     160      90
13F     130      90
14G     155      90
15H      70      50
16I      70      60
17J      20      70
18dfl = df.nlargest(3,'HEIGHT')
19print(dfl)
20HEIGHT  WEIGHT
21A     170      50
22D     160      80
23E     160      90

اگر دو مورد یکسان باشند، چند گزینه برای حل مشکل با استفاده از first ،last ،all وجود دارد. می‌توانیم همه رخدادها را حفظ کنیم. تلاش می‌کنیم دو مورد از بلندترین قدها را در مثال زیر پیدا کنیم.

5 تابع مفید پانداز در پایتون

1dfl = df.nlargest(2,'HEIGHT',keep='all')
2print(dfl)
3HEIGHT  WEIGHT
4A     170      50
5D     160      80
6E     160      90

آخرین رخداد را نگه می‌داریم.

1dfl = df.nlargest(2,'HEIGHT',keep='last')
2print(dfl)
3HEIGHT  WEIGHT
4A     170      50
5E     160      90

رخداد نخست را نگه می‌داریم:

1dfl = df.nlargest(2,'HEIGHT',keep='first')
2print(dfl)
3HEIGHT  WEIGHT
4A     170      50
5D     160      80

برای کسب اطلاعات بیشتر در خصوص این متد به صفحه مستندات رسمی (+) ‌پانداز مراجعه کنید.

تابع ()nsmallest

تابع ()nsmallest نیز به طرزی مشابه عمل می‌کند، اما این بار از فیلتر کوچک‌ترین استفاده می‌کند. در مثال زیر از گزینه وزن برای یافتن کمترین دو وزن استفاده می‌کنیم:

1import pandas as pd
2import numpy as np
3df = pd.DataFrame({'HEIGHT': [170,78,99,160,160,130,155,70,70,20],
4                   'WEIGHT': [50,60,70,80,90,90,90,50,60,70]},
5                   index=['A','B','C','D','E','F','G','H','I','J'])
6print(df)
7HEIGHT  WEIGHT
8A     170      50
9B      78      60
10C      99      70
11D     160      80
12E     160      90
13F     130      90
14G     155      90
15H      70      50
16I      70      60
17J      20      70
18dfs = df.nsmallest(3,'WEIGHT')
19print(dfs)
20HEIGHT  WEIGHT
21A     170      50
22H      70      50
23B      78      60

برای کسب اطلاعات بیشتر در خصوص این متد به صفحه مستندات رسمی (+) ‌پانداز مراجعه کنید.

سخن پایانی

پنج تابع پانداز وجود دارند که نه تنها مفید و عالی هستند، بلکه کارکرد کاملاً مشخص و روشنی دارند. در این مقاله با این تابع‌ها آشنا شدیم. شما ‌می‌توانید از این تابع‌ها برای ایجاد سهولت در محاسبات مختلف استفاده کنید.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

بر اساس رای ۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
towardsdatascience
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *