如何对数据框中有日期的列进行排序?
Posted
技术标签:
【中文标题】如何对数据框中有日期的列进行排序?【英文标题】:How to sort a column that have dates in a dataframe? 【发布时间】:2020-08-07 07:58:59 【问题描述】:我有一个这样的数据框:
SEMANAS HIDROLOGICAS METEOROLOGICAS
0 02042020 36.00583090379008 31.284418529316522
1 05032020 86.91690962099126 77.01136731748973
2 12032020 87.31778425655976 77.24180581323434
3 19032020 59.2201166180758 54.57343110404338
4 26032020 32.39795918367347 29.049238743116323
我使用此代码将 df.SEMANAS 更改为 datetime
Semanas_Oper['SEMANAS']=pd.to_datetime(Semanas_Oper['SEMANAS'], format='%d%m%Y').dt.strftime('%d/%m/%Y')
SEMANAS HIDROLOGICAS METEOROLOGICAS
02/04/2020 36.01 31.28
05/03/2020 86.92 77.01
12/03/2020 87.32 77.24
19/03/2020 59.22 54.57
26/03/2020 32.4 29.05
但是 pd.to_datetime 没有对 df.SEMANAS 列的日期进行排序 你能告诉我如何对这些列进行排序。 02/04/2020 必须在最后一行。
【问题讨论】:
【参考方案1】:您需要使用datetime64
ns
格式对其进行排序,如果需要,将其改回dd/mm/yyyy
df['SEMANAS'] = pd.to_datetime(df['SEMANAS'], format='%d%m%Y')
df.sort_values(by=['SEMANAS'], inplace=True)
df['SEMANAS'] = pd.to_datetime(df['SEMANAS'], format='%d%m%Y').dt.strftime('%d/%m/%Y')
print(df)
SEMANAS HIDROLOGICAS METEOROLOGICAS
1 05/03/2020 86.916910 77.011367
2 12/03/2020 87.317784 77.241806
3 19/03/2020 59.220117 54.573431
4 26/03/2020 32.397959 29.049239
0 02/04/2020 36.005831 31.284419
【讨论】:
【参考方案2】:dt.strftime()
撤消日期时间转换并将您带回字符串。如果你对此进行排序,你将得到字典排序,而不是你想要的,因为你的格式是'%d/%m/%Y'
('%Y/%m/%d'
会很好)。
当working with dates in pandas 时,您应该保留 datetime64[ns] dtype。这是执行所有日期时间操作的最简单方法。仅当您需要移动到需要非常特定的字符串格式的其他库或文件输出时才使用.strftime
。
df['SEMANAS'] = pd.to_datetime(df['SEMANAS'], format='%d%m%Y')
df.dtypes
#SEMANAS datetime64[ns]
#HIDROLOGICAS object
#METEOROLOGICAS object
df = df.sort_values('SEMANAS')
# SEMANAS HIDROLOGICAS METEOROLOGICAS
#1 2020-03-05 86.91690962099126 77.01136731748973
#2 2020-03-12 87.31778425655976 77.24180581323434
#3 2020-03-19 59.2201166180758 54.57343110404338
#4 2020-03-26 32.39795918367347 29.049238743116323
#0 2020-04-02 36.00583090379008 31.284418529316522
【讨论】:
以上是关于如何对数据框中有日期的列进行排序?的主要内容,如果未能解决你的问题,请参考以下文章