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

使用Pandas按日期排序DataFrame时的Excel日期解析与排序问题

解决Pandas中dd/mm/yyyy格式日期解析与排序问题

核心问题拆解

  • pd.to_datetime() 默认会自动识别日期格式,遇到12/02/2023这类格式时,会优先按月/日/年解析(即2023-12-02),和你需要的日/月/年格式不符。
  • 你后续用dt.strftime('%d/%m/%Y')把日期转回了字符串类型,字符串排序是按字符顺序比较的,所以31/01/2023会因为开头的3比2大,排在28/02/2023后面。

正确解决方案

1. 强制指定日期解析格式

在pd.to_datetime()中通过format参数明确指定输入格式为%d/%m/%Y,确保解析逻辑完全符合你的需求。

2. 保留datetime类型用于排序

不要立即将日期转成字符串,用datetime类型完成排序后,若需要显示为dd/mm/yyyy格式,可单独新增列或设置显示选项,避免破坏日期的数值排序逻辑。

修改后的代码示例

处理模拟数据

import pandas as pd

dictionary = {
      "DATE" : ['12/02/2023', '02/01/2023', '02/01/2023', '10/02/2023'],    
      "CONCEPT" : ['Supermarket','Restaurant', 'Gas', 'Suscription'],
      "EUR" : [-150,-50,-45,-95]
          }
df = pd.DataFrame(dictionary)

# 关键:指定format参数解析dd/mm/yyyy格式,保留datetime类型
df['DATE'] = pd.to_datetime(df['DATE'], format='%d/%m/%Y')

# 按日期排序(此时是datetime类型,排序逻辑正确)
df = df.sort_values(by=['DATE'], axis=0, ascending=True)

# 可选:新增显示列,保留原datetime列用于后续操作
df['DATE_DISPLAY'] = df['DATE'].dt.strftime('%d/%m/%Y')

print(df)

处理实际Excel文件

# 方法1:读取时直接指定解析规则
df = pd.read_excel('your_excel_file.xlsx', parse_dates=['DATE'], 
                   date_parser=lambda x: pd.to_datetime(x, format='%d/%m/%Y'))

# 方法2:读取后再转换日期列
df = pd.read_excel('your_excel_file.xlsx')
df['DATE'] = pd.to_datetime(df['DATE'], format='%d/%m/%Y')

# 执行排序
df = df.sort_values(by=['DATE'], ascending=True)

额外注意事项

如果Excel中日期列存在混合格式或无效值,可添加errors='coerce'参数将无法解析的内容转为NaT(缺失日期值),方便后续排查处理:

df['DATE'] = pd.to_datetime(df['DATE'], format='%d/%m/%Y', errors='coerce')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:23:16