وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

چگونه یک DataFrame پاندا را بر اساس تاریخ مرتب کنیم

0 28
زمان لازم برای مطالعه: 6 دقیقه


معرفی

Pandas یک کتابخانه بسیار محبوب دستکاری و تجزیه و تحلیل داده است. این ابزار برای بارگیری و تجزیه و تحلیل مجموعه داده ها برای بسیاری است.

مرتب سازی صحیح داده ها یک عنصر حیاتی در بسیاری از وظایف مربوط به تجزیه و تحلیل داده ها است. در این آموزش نگاهی به این خواهیم داشت چگونه می توان یک Pandas DataFrame را بر اساس تاریخ مرتب کرد.

بیایید با ساخت یک ساده شروع کنیم DataFrame با چند تاریخ:

import pandas as pd

data = {'Name':("John", "Paul", "Dhilan", "Bob", "Henry"), 
'Date of Birth': ("01/06/86", "05/10/77", "11/12/88", "25/12/82", "01/06/86")}
df = pd.DataFrame(data) 

print(df)

به طور پیش فرض خروجی ما بر اساس طبقه بندی می شود DataFrameشاخص s:

    Name Date of Birth
0    John      01/06/86
1    Paul      05/10/77
2  Dhilan      11/12/88
3     Bob      25/12/82
4   Henry      01/06/86

چشم عقابی ممکن است متوجه شود که جان و پل تاریخ تولد یکسانی دارند – این است روی-هدف همانطور که در یک لحظه خواهیم دید.

تبدیل رشته ها به Datetime در پانداها DataFrame

ورودی داریم Date of Birth در قالب تاریخ و به نظر می رسد که به این صورت قالب بندی شده است. با این حال، اولین کاری که باید انجام دهیم این است که اطمینان حاصل کنیم پانداها تشخیص می دهند و می فهمد که این تاریخ در واقع یک تاریخ است.

روشی که پانداها داده ها را در الف ذخیره و دستکاری می کنند DataFrame بر اساس نوع داده آن تعیین می شود.

نوع داده هر مقدار به طور خودکار، بر اساس، اختصاص داده می شود روی به نظر می رسد 60 در حالی که به یک نوع عدد صحیح اختصاص داده می شود John یک نوع رشته اختصاص داده خواهد شد. بیایید نوع داده فعلی هر ستون را بررسی کنیم:

print(df.dtypes)

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

Name             object
Date of Birth    object
dtype: object

ما می توانیم خودمان را ببینیم Date of Birth به ستون به طور پیش فرض یک نوع شی رشته پایه اختصاص داده شده است. با این حال، برای مرتب‌سازی، تجزیه و تحلیل یا دستکاری صحیح تاریخ‌هایمان، به پانداها نیاز داریم که این ستون حاوی تاریخ‌ها را تشخیص دهد.

بیایید به صراحت نوع داده را در خود تغییر دهیم Date of Birth ستون از یک object به a تایپ کنید datetime نوع

ساده ترین راه برای انجام این کار استفاده از to_datetime() تابع:

df("Date of Birth") = pd.to_datetime(df("Date of Birth"))
print(df.dtypes)

حال، اگر خروجی خود را بررسی کنیم:

Name                     object
Date of Birth    datetime64(ns)
dtype: object

بنابراین، می توانیم ببینیم که با موفقیت نوع داده خود را به تغییر داده ایم datetime.

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

df("Date of Birth") = df("Date of Birth").astype('datetime64(ns)')

خروجی:

Name                     object
Date of Birth    datetime64(ns)
dtype: object

در حالی که هر دوی این روش ها یک نتیجه را ایجاد می کنند، to_datetime() روش ترجیح داده می شود زیرا به صراحت برای این منظور طراحی شده است.

مرتب سازی DataFrame بر اساس تاریخ در پانداها

اکنون که پانداها انواع داده های ما را به درستی تشخیص می دهند، بیایید آنها را مرتب کنیم DataFrame.

توجه داشته باشید: همه روش‌هایی که استفاده خواهیم کرد مرتب‌سازی نمی‌شوند درجا، بنابراین باید تغییر را مجدداً اختصاص دهید DataFrame به یک متغیر مرجع جدید (یا همان) برای تداوم تغییر – یا می توانید از آن استفاده کنید inplace آرگومان برای تغییر رفتار پیش فرض.

مرتب سازی بر اساس تک ستون تاریخ به ترتیب صعودی

این sort_values() متد به طور پیش فرض داده ها را به ترتیب صعودی مرتب می کند. برای تاریخ ها، این به این معنی است که اولین یا زودترین ترتیب در بالای لیست ظاهر می شود:

df.sort_values(by='Date of Birth', inplace=True)
print(df)

اجرای این کد نتیجه می دهد:

    Name	Date of Birth
1	Paul	1977-05-10
3	Bob	1982-12-25
0	John	1986-01-06
4	Henry	1986-01-06
2	Dhilan	1988-11-12

یا اگر نمی خواهید از آن استفاده کنید inplace آرگومان برگردانده شده را به سادگی می توانید دوباره اختصاص دهید DataFrame از sort_values() روش به df (یا هر متغیر مرجع دیگری:

df = df.sort_values(by='Date of Birth')

همانطور که ما تولد یکسانی به جان و هنری دادیم، ترتیب بر اساس آن است روی شماره شاخص مربوطه آنها

مرتب سازی بر اساس تک ستون تاریخ به ترتیب نزولی

تغییر ترتیب مرتب سازی به نزولی می تواند با تنظیم کردن انجام شود ascending استدلال به False هنگام تماس با sort_values() تابع:

df.sort_values(by='Date of Birth', ascending = False, inplace=True)

این بار ما داده های خود را به ترتیب نزولی مرتب می کنیم، به این معنی که آخرین یا جدیدترین آنها در بالای لیست ما ظاهر می شود. دوباره از آنجایی که جان و هنری روز تولد یکسانی دارند، ترتیب آنها بر اساس آن است روی شماره شاخص آنها:

    Name	Date of Birth
2	Dhilan	1988-11-12
0	John	1986-01-06
4	Henry	1986-01-06
3	Bob	1982-12-25
1	Paul	1977-05-10

مرتب سازی بر اساس چندین ستون تاریخ

بنابراین، اگر چندین ستون تاریخ داشته باشیم که بخواهیم بر اساس آنها مرتب کنیم، چه اتفاقی می افتد؟

بیایید یک ستون دیگر مربوط به تاریخ را به خود اضافه کنیم DataFrame و مطمئن شوید که هر دو نوع داده ما به درستی اختصاص داده شده اند:


employment_start = ("22/05/16", "17/08/10", "22/05/16", "11/06/19", "16/06/05")

df('Employment Start') = employment_start


df(('Date of Birth', 'Employment Start')) = df(('Date of Birth', 'Employment Start')).apply(pd.to_datetime)

print(df.dtypes)
print(df)

حالا، بیایید بررسی کنیم که آیا همه چیز خوب به نظر می رسد:

Name                        object
Date of Birth       datetime64(ns)
Employment Start    datetime64(ns)
dtype: object

     Name Date of Birth Employment Start
0    John    1986-01-06       2016-05-22
1    Paul    1977-05-10       2010-08-17
2  Dhilan    1988-11-12       2016-05-22
3     Bob    1982-12-25       2019-11-06
4   Henry    1986-01-06       2005-06-16

مرتب سازی بر اساس چندین ستون تاریخ به ترتیب صعودی

برای مرتب کردن DataFrame با هر دو Date of Birth و Employment Start به ترتیب صعودی، ما به سادگی باید نام هر دو ستون را به خود اضافه کنیم sort_values() روش. فقط به خاطر داشته باشید که اولویت مرتب سازی با توجه به اینکه کدام ستون ابتدا وارد می شود تعیین می شود:

df.sort_values(by=('Date of Birth', 'Employment Start'), inplace=True)

از آنجایی که این روش به طور پیش فرض به ترتیب صعودی است، خروجی ما به صورت زیر خواهد بود:

    Name	Date of Birth	Employment Start
1	Paul	1977-05-10	    2010-08-17
3	Bob	1982-12-25	    2019-11-06
4	Henry	1986-01-06	    2005-06-16
0	John	1986-01-06	    2016-05-22
2	Dhilan	1988-11-12	    2016-05-22

مانند Date of Birth اولین ستونی است که در متد ما وارد شده است، Pandas آن را اولویت بندی می کند. از آنجایی که جان و هنری همین را دارند Date of Birth، آنها بر اساس طبقه بندی شده اند Employment Start در عوض ستون

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

همانند مرتب‌سازی تک ستونی، می‌توانیم با تغییر ترتیب، ترتیب را به ترتیب نزولی تغییر دهیم ascending پارامتر به False:

df.sort_values(by=('Date of Birth', 'Employment Start'), ascending = False, inplace=True)

حال، خروجی ما به ترتیب نزولی است:

Name	Date of Birth	Employment Start
2	Dhilan	1988-11-12	2016-05-22
0	John	1986-01-06	2016-05-22
4	Henry	1986-01-06	2005-06-16
3	Bob 	1982-12-25	2019-11-06
1	Paul	1977-05-10	2010-08-17

همانطور که می بینیم جان و هنری هر دو در لیست بالاتر ظاهر می شوند زیرا تولدها به ترتیب نزولی نمایش داده می شوند. با این حال، این بار، جان به دلیل کارهای اخیرش بر هنری اولویت دارد Employment Start تاریخ.

مرتب سازی بر اساس چندین ستون تاریخ و مرتب سازی با ترتیب متغیر

حال، اگر نه تنها بخواهیم با استفاده از چندین ستون مرتب کنیم، بلکه این ستون ها را با معیارهای صعودی مختلف مرتب کنیم، چه؟ با پانداها، این را می توان در همان پیاده سازی کرد sort_values() روشی که تاکنون استفاده کرده ایم فقط باید لیست صحیح و متناظر مقادیر را در آن پاس کنیم ascending پارامتر.

در این مثال فرض کنید می خواهیم خودمان را مرتب کنیم Employment Start به ترتیب صعودی، یعنی در ابتدا طولانی ترین خدمت، اما سپس آنها Date of Birth به ترتیب نزولی یعنی جوانترین اول:

df.sort_values(by=('Employment Start', 'Date of Birth'), ascending = (True, False), inplace=True)

داده ها ابتدا بر اساس طبقه بندی می شوند Employment Start به ترتیب صعودی، این اولویت دارد زیرا این اولین ستونی بود که در روش ما ارسال شد. سپس مرتب می کنیم Date of Birth به ترتیب نزولی همانطور که دیلان و جان در همین زمینه سهیم هستند Employment Start دیلان اکنون اولویت دارد زیرا از جان جوانتر است:

Name	Date of Birth	Employment Start
4	Henry	1986-01-06	2005-06-16
1	Paul	1977-05-10	2010-08-17
2	Dhilan	1988-11-12	2016-05-22
0	John	1986-01-06	2016-05-22
3	Bob	1982-12-25	2019-11-06

نتیجه

با توجه به محبوبیت کتابخانه پانداها، مرتب سازی داده ها بر اساس تعجب آور نیست روی ستون ها ساده است process. ما نگاهی به انعطاف پذیری استفاده از آن انداختیم sort_values() روش در ستون های منفرد و چندگانه، به صورت صعودی، نزولی و حتی به ترتیب متغیر. در حالی که ما تمرکز کرده ایم روی مرتب سازی بر اساس تاریخ، این روش را می توان در چندین نوع داده استفاده کرد.

هنگامی که به طور خاص به دنبال مرتب‌سازی بر اساس تاریخ هستید، اولین و مسلماً مهم‌ترین مرحله این است که مطمئن شوید که به درستی datetime به داده های ما تایپ کنید بدون تعریف درست نوع داده‌هایمان، این خطر را داریم که پانداها اصلاً تاریخ ما را تشخیص ندهند.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-12 01:40:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

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

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید