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

Pandas多格式日期列转换时日月颠倒问题的解决方法

解决Pandas混合日期格式解析时的日月颠倒问题

问题根源

你之前的代码存在两个关键问题:

  1. 连续两次调用pd.to_datetime,第二次的固定格式会直接覆盖第一次的转换结果,属于无效操作;
  2. 使用format='mixed'时未指定dayfirst=True,导致Pandas对斜杠分隔的日期(如01/12/2022)默认按美式日期习惯(月/日/年)解析,造成日月颠倒。

解决方案

你的四种日期格式(dd/mm/yyyy、dd-mm-yyyy、dd-MMM-yyyy、dd/MMM/yyyy)均为日在前的格式,可用以下两种方法正确转换:

方法一:用format='mixed'强制日优先

直接在pd.to_datetime中指定dayfirst=True,让Pandas优先按日/月/年的逻辑解析日期:

import pandas as pd

# 构造样本数据
data = {'Date': ['01/12/2022', '22/02/2012', '12-Jan-2023', '19-10-2000', '03/Feb/2021']}
df = pd.DataFrame(data)

# 转换日期列
df['Date'] = pd.to_datetime(df['Date'], format='mixed', dayfirst=True)

方法二:显式列出所有格式(更精准)

把所有可能的日期格式列出来,让Pandas逐个尝试匹配,彻底避免歧义:

import pandas as pd

data = {'Date': ['01/12/2022', '22/02/2012', '12-Jan-2023', '19-10-2000', '03/Feb/2021']}
df = pd.DataFrame(data)

# 定义所有待匹配的日期格式
date_formats = ['%d/%m/%Y', '%d-%m-%Y', '%d-%b-%Y', '%d/%b/%Y']
df['Date'] = pd.to_datetime(df['Date'], format=date_formats, dayfirst=True)

验证结果

转换后可通过以下代码确认类型和结果:

# 查看列类型
print(df.dtypes)
# 查看转换后的日期
print(df['Date'])

输出会显示Date列为datetime64[ns]类型,且所有日期都按日/月/年的正确逻辑解析(比如01/12/2022会被转为2022-12-01)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:31:14