📌  相关文章
📜  如何按日期对 Pandas DataFrame 进行排序?

📅  最后修改于: 2022-05-13 01:55:19.595000             🧑  作者: Mango

如何按日期对 Pandas DataFrame 进行排序?

在现实世界中,我们可以遇到任何形式的数据集,其中也可能包含日期。这些数据集可以以任何文件格式存在,如 .CSV、.xlsx、.txt 等。为了将这些数据加载到Python中,我们使用了一个名为 Pandas 的库,它为我们提供了大量的函数和方法来处理这些数据。 Pandas 以 DataFrame 的形式读取这些数据集。

有时,可能会出现数据集可能包含与日期相关的属性的情况,我们希望按照特定顺序的日期值对数据框中的记录进行排序。

在本文中,我们将了解如何按日期对 Pandas DataFrame 进行排序。我将创建一个模仿现实世界问题的自定义数据帧对象,这种方法将普遍适用于任何数据帧。

按单列排序

要根据包含日期的列对 DataFrame 进行排序,我们将遵循一系列步骤,让我们一起学习。

步骤 1:加载或创建具有日期列的数据框

Python
# importing package
import pandas as pd
 
# Creating a dataframe that stores records of students taking admission in a college
data = pd.DataFrame({'AdmissionDate': ['2021-01-25','2021-01-22','2021-01-20',
                        '2021-01-18','2021-01-22','2021-01-17','2021-01-21'],
                     'StudentID': [7,5,3,2,6,1,4],
                     'Name': ['Ram','Shyam','Mohan','Sohan','Lucky','Abhinav','Danny'],
                     'Stream':['CSE','ECE','Civil','Mechanical','CSE','IT','EEE']
                   })
# Checking dataframe
print(data)


Python
# checking datatype
print(type(data.AdmissionDate[0]))
 
# convert to date
data['AdmissionDate'] = pd.to_datetime(data['AdmissionDate'])
 
# verify datatype
print(type(data.AdmissionDate[0]))


Python
data.sort_values(by='AdmissionDate')
print(data)


Python
data.sort_values(by='AdmissionDate',ascending=False)
print(data)


Python
# importing package
import pandas as pd
 
# Creating a DataFrame
data_1 = pd.DataFrame({'Mfg. Date': ['2021-01-25','2021-01-22','2021-01-20','2021-01-18',
                       '2021-01-22','2021-01-17','2021-01-21'],
                       'ProductID': [7,5,3,2,6,1,4],
                       'Product Name': ['Paracetamol','Moov','Volini','Crocin',
                                        'Aciloc','Iodex','Combiflam'],
                       'Expiry Date':['2022-01-25','2023-01-22','2021-05-20','2022-03-18',
                                      '2022-01-22','2021-05-17','2022-01-30']
                       })
 
# Checking dataframe
print(data_1)


Python
data_1[['Mfg. Date','Expiry Date']] = data_1[['Mfg. Date','Expiry Date']].apply(pd.to_datetime)


Python
# sorting DateFrame by giving first priority to Expiry Date and then Mfg. Date
data_1.sort_values(by=['Expiry Date', 'Mfg. Date'])



输出:

在这里,可以清楚地看到我们的 DataFrame 包含一个名为“AdmissionDate”的列,其中包含日期值。

步骤 2:将字符串数据类型转换为日期时间对象。

当我们读取数据集时,存储在 'AdmissionDate' 列中的值默认被视为字符串数据类型。因此,我们需要将此字符串对象转换为 datetime 对象,为此我们将使用 Pandas 提供的 .to_datetime() 方法,可以这样做:

Python

# checking datatype
print(type(data.AdmissionDate[0]))
 
# convert to date
data['AdmissionDate'] = pd.to_datetime(data['AdmissionDate'])
 
# verify datatype
print(type(data.AdmissionDate[0]))

输出:


第 3 步:按日期对 DataFrame 进行排序

我们将使用 sort_values() 方法对我们的数据集进行排序,我们将在函数中传递的属性是我们要用于对 DataFrame 进行排序的列名。

Python

data.sort_values(by='AdmissionDate')
print(data)

输出:

这里要注意的一件事是我们的 DataFrame 按日期的升序排序,要按降序对 DataFrame 进行排序,我们可以在 sort_values()函数中传递一个附加参数,该参数将升序值设置为 False 并按降序返回 DataFrame .

Python

data.sort_values(by='AdmissionDate',ascending=False)
print(data)


输出:

按日期按多列排序

我们也可以进一步扩展我们对多个日期时间列的排序的理解,在这方面,我们维护一个优先级顺序来对我们的 DataFrame 进行排序。我们来看一下。

步骤 1:加载或创建具有多个日期列的数据框

Python

# importing package
import pandas as pd
 
# Creating a DataFrame
data_1 = pd.DataFrame({'Mfg. Date': ['2021-01-25','2021-01-22','2021-01-20','2021-01-18',
                       '2021-01-22','2021-01-17','2021-01-21'],
                       'ProductID': [7,5,3,2,6,1,4],
                       'Product Name': ['Paracetamol','Moov','Volini','Crocin',
                                        'Aciloc','Iodex','Combiflam'],
                       'Expiry Date':['2022-01-25','2023-01-22','2021-05-20','2022-03-18',
                                      '2022-01-22','2021-05-17','2022-01-30']
                       })
 
# Checking dataframe
print(data_1)


输出:

在这里,可以清楚地看到我们的 DataFrame 包含两列具有日期的列,即 'Mfg.日期”和“到期日期”。

步骤 2:将字符串数据类型转换为日期时间对象。

Python

data_1[['Mfg. Date','Expiry Date']] = data_1[['Mfg. Date','Expiry Date']].apply(pd.to_datetime)


第 3 步:按日期对 DataFrame 进行排序

Python

# sorting DateFrame by giving first priority to Expiry Date and then Mfg. Date
data_1.sort_values(by=['Expiry Date', 'Mfg. Date'])


输出:

在这里,我们根据我们的优先级按到期日期的升序获得了一个排序列表。