排序字符串 'Apr-01','Feb-02'... 在一月到十二月排序 顺序:Pandas
Posted
技术标签:
【中文标题】排序字符串 \'Apr-01\',\'Feb-02\'... 在一月到十二月排序 顺序:Pandas【英文标题】:sort strings of 'Apr-01',' Feb-02'... sort in January to December Order: Pandas排序字符串 'Apr-01','Feb-02'... 在一月到十二月排序 顺序:Pandas 【发布时间】:2021-12-01 19:42:48 【问题描述】:一如既往,我们非常感谢大家的帮助 我有一个熊猫列,其中包含来自 datetime obj 的字符串。需要在一月 - 十二月的顺序(一月,二月,三月...十二月)对它们进行排序。我试图将该列转换为日期时间,但看起来像 Apr-01 没有年份参考不会转换(或者我无法弄清楚)
df = pd.DataFrame(['Apr-01','Apr-02','Apr-03','Aug-01','Aug-02',
'Aug-03','Dec-07','Dec-08','Dec-09','Jul-01','Jul-02','Jul-03'])
【问题讨论】:
【参考方案1】:您可以添加默认年份,例如
import pandas as pd
df = pd.DataFrame('dates':['Apr-01','Apr-02','Apr-03','Aug-01','Aug-02',
'Aug-03','Dec-07','Dec-08','Dec-09','Jul-01','Jul-02','Jul-03'])
# use 2020 as default year in case dates originate from leap year...
df['dates_y'] = pd.to_datetime(df['dates']+' 2020')
df.sort_values(by=['dates_y'])
Out[2]:
dates dates_y
0 Apr-01 2020-04-01
1 Apr-02 2020-04-02
2 Apr-03 2020-04-03
9 Jul-01 2020-07-01
10 Jul-02 2020-07-02
11 Jul-03 2020-07-03
3 Aug-01 2020-08-01
4 Aug-02 2020-08-02
5 Aug-03 2020-08-03
6 Dec-07 2020-12-07
7 Dec-08 2020-12-08
8 Dec-09 2020-12-09
清理后,您将设置一个key
进行排序,使用与默认年份创建日期时间相同的原则:
df.sort_values(by=['dates'], key=lambda t: pd.to_datetime(t+' 2020'))
Out[3]:
dates
0 Apr-01
1 Apr-02
2 Apr-03
9 Jul-01
10 Jul-02
11 Jul-03
3 Aug-01
4 Aug-02
5 Aug-03
6 Dec-07
7 Dec-08
8 Dec-09
【讨论】:
'cleaner' 版本要好得多,因为它节省了几行代码和创建新列的中间步骤。一行,非常优雅,非常感谢 @data_runner 第一个选项很好地说明了原理,尽管我在实践中也会使用第二个。 同意!如果没有第一选择,就很难掌握这个概念。我什至首先天真地尝试将 2021 年作为虚拟年,但显然它抛出了错误,因为 2021 年 12 月 18 日还不存在(截至今天,2021 年 10 月 17 日)以上是关于排序字符串 'Apr-01','Feb-02'... 在一月到十二月排序 顺序:Pandas的主要内容,如果未能解决你的问题,请参考以下文章
如何在python中将'Sat Feb 02 12:50:00 IST 2019'转换为常规日期时间?