按字符串日期对 pandas 数据框进行排序而不进行转换

Luc*_*pan 3 python sorting datetime pandas

设置

我有一个数据框,其中有一列包含字符串中的日期。

日期格式为日/月/年,例如 05/12/2018。

数据test_df框看起来像,

   date_created
0    05/12/2018
1    04/12/2018
2    04/12/2018
3    03/12/2018
4    02/12/2018
5    30/11/2018
6    30/11/2018
7    30/11/2018
8    30/11/2018
9    29/11/2018
10   02/12/2018
11   29/11/2018
12   29/11/2018
Run Code Online (Sandbox Code Playgroud)

问题

我希望按日期对此进行排序,这样我就可以,

   date_created
0    05/12/2018    
1    04/12/2018
2    04/12/2018
3    03/12/2018
10   02/12/2018    
4    02/12/2018
5    30/11/2018
6    30/11/2018
7    30/11/2018
8    30/11/2018
9    29/11/2018
11   29/11/2018
12   29/11/2018
Run Code Online (Sandbox Code Playgroud)

但按照这个例子

test_df.sort_values(by='date_created', inplace=False, ascending=True)

给出,

   date_created
4    02/12/2018
10   02/12/2018
3    03/12/2018
1    04/12/2018
2    04/12/2018
0    05/12/2018
9    29/11/2018
11   29/11/2018
12   29/11/2018
5    30/11/2018
6    30/11/2018
7    30/11/2018
8    30/11/2018
Run Code Online (Sandbox Code Playgroud)

当月如何撤销订单?

jpp*_*jpp 9

推荐的解决方案是将您的系列转换为datetime,然后排序:

df['date_created'] = pd.to_datetime(df['date_created'], dayfirst=True)

res = df.sort_values('date_created', ascending=False)

print(res)

   date_created
0    2018-12-05
1    2018-12-04
2    2018-12-04
3    2018-12-03
4    2018-12-02
10   2018-12-02
5    2018-11-30
6    2018-11-30
7    2018-11-30
8    2018-11-30
9    2018-11-29
11   2018-11-29
12   2018-11-29
Run Code Online (Sandbox Code Playgroud)

如果您坚持保留dtype 系列,object可以在单独的操作中转换回字符串:

res['date_created'] = res['date_created'].dt.strftime('%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)