You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于日期/时间排序Pandas Dataframe无效问题排查

问题描述

我从Access表格创建了一个DataFrame,其中Date列是object类型,格式示例为2019-12-31 12:55:00。我想按日期升序排序这个DataFrame,于是用以下代码将该列转为datetime类型:

df['Date'] = pd.to_datetime(df['Date'])

随后尝试用以下代码排序,但没有生效,DataFrame和排序前完全一致:

df.sort_values(by='Date')

以下是DataFrame的部分数据:

DateRefTT
31/12/2019 12:5510107355
31/12/2020 15:2536643074
31/12/2020 14:1536868924
08/01/2019 17:3524763287
08/01/2019 19:4510073929
08/01/2019 14:5024132711
08/01/2019 18:4024576111
08/01/2019 14:4012255761
08/01/2019 13:3018443380
31/12/2020 14:0025106015
31/01/2019 15:1019629874
31/01/2019 19:3014505238
31/01/2020 15:4011930839
31/01/2020 13:408753735
31/01/2020 14:4523523591
31/01/2020 17:1527388541
31/01/2021 15:1028575475
28/02/2019 16:3021470086
28/02/2019 16:5518136828
28/02/2019 13:3511896776
28/02/2019 13:5014708670
28/02/2019 14:2516095243
29/02/2020 15:0026641007
29/02/2020 15:4524342002
29/02/2020 13:371532111
29/02/2020 16:1026684160
28/02/2021 16:406320524
28/02/2021 16:2027632002
28/02/2021 15:1021104540
31/03/2019 17:406896639
31/03/2021 15:1038036656
31/03/2021 17:2021281524
31/03/2021 15:0024986895
31/03/2021 15:5026600969
解决办法

1. 让排序修改原DataFrame

sort_values()默认返回新的DataFrame,不会改动原数据,你有两种方式解决:

  • 把排序结果重新赋值给原变量:
    df = df.sort_values(by='Date')
    
  • 或者添加inplace=True参数直接修改原数据:
    df.sort_values(by='Date', inplace=True)
    

2. 确保日期格式正确转换

从样本数据看,Date列实际格式是DD/MM/YYYY HH:MM,和你最初描述的格式不一致,可能导致pd.to_datetime()解析错误(比如把日和月颠倒),进而影响排序。你可以指定格式参数来保证转换准确:

df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y %H:%M')

如果不确定格式,也可以用dayfirst=True让解析器优先识别第一个数字为日期:

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

3. 验证转换结果

转换后可以用以下代码确认Date列的类型和解析结果:

# 查看列类型
print(df.dtypes)
# 查看前几行的日期解析结果
print(df['Date'].head())

确保Date列类型是datetime64[ns],且日期解析正确,避免因转换失败导致排序无效。

内容的提问来源于stack exchange,提问作者Robsmith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 13:30:53