如何对数据框中有日期的列进行排序?

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】:

您需要使用datetime64ns 格式对其进行排序,如果需要,将其改回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

【讨论】:

以上是关于如何对数据框中有日期的列进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何同时对熊猫数据框中的列进行排序[重复]

如何在 Pandas 数据框中按行值对日期时间列进行排序?

如何根据列的值对熊猫数据框中的列进行分类?

如何在数据透视后对python中数据框中的索引列以外的列进行排序

如何在pyspark中按字母顺序对嵌套结构的列进行排序?

按列名对数据框的列进行排序为日期