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

Pandas to_datetime处理非美式日期存在行为不一致问题

解决pandas to_datetime 非美式日期推断不一致的问题

我完全懂你的困惑——pandas的to_datetime自动推断日期格式时的这种“双重标准”确实让人摸不着头脑!咱们先拆解一下为什么会出现这种情况,再给出靠谱的解决办法。

为什么会出现推断不一致?

默认情况下,to_datetime是逐元素单独推断格式的,而不是从整个序列统一判断规则:

  • 当遇到像13/05/2023或27/05/2023这种日期字符串时,因为13和27不可能是月份(月份范围是1-12),所以pandas会自动切换到dd/mm/yyyy格式解析。
  • 但遇到02/05/2023或04/05/2023这种歧义日期(既可以理解为mm/dd/yyyy,也可以是dd/mm/yyyy),pandas会默认优先采用美式的mm/dd/yyyy格式,这就导致了同一列里解析规则不一致的问题。

解决办法:统一解析规则

想要让所有日期都按dd/mm/yyyy格式解析,有两种可靠的方式:

1. 明确指定日期格式(推荐)

直接告诉pandas你的日期格式,这是最稳妥、性能也最好的方式,完全避免歧义:

import pandas as pd

dates_series = pd.Series([
    "02/05/2023",
    "13/05/2023",
    "27/05/2023",
    "04/05/2023"
])

# 明确指定dd/mm/yyyy格式
parsed_dates = pd.to_datetime(dates_series, format="%d/%m/%Y")
print(parsed_dates)

运行后所有日期都会被正确解析为日/月/年格式,不会出现混乱。

2. 使用dayfirst=True参数

如果你确定所有日期都是国际通用的dd/mm/yyyy格式,可以用这个参数告诉pandas“优先把第一个数字当作日期”:

parsed_dates = pd.to_datetime(dates_series, dayfirst=True)

⚠️ 注意:如果你的序列里混有美式日期(比如05/02/2023想表示5月2日),这个参数会把它错误解析为2月5日,所以只在数据源格式统一时使用。

总结

pandas的自动推断是为了兼容多种场景,但遇到歧义日期时的默认行为并不符合非美式日期的使用习惯。明确指定格式是解决这类问题的最佳实践,既保证结果准确,也能提升解析效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:32:31