از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
چگونه یک DataFrame پاندا را بر اساس تاریخ مرتب کنیم
سرفصلهای مطلب
معرفی
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