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

Pandas如何将DataFrame列中混合格式日期统一为dd.mm.yyyy格式

Pandas混合日期格式统一转换方案

问题原因

pd.to_datetime()默认自动推断日期格式时,对分隔符对应的日期顺序判定规则不固定:针对点分隔的日期字符串,会默认优先按照mm.dd.yyyy规则解析,当日数值≤12时就会出现日月互换的错位问题。另外原有代码中dt.strftime()的执行结果没有赋值回DataFrame列,即使解析正确也不会修改原数据。

输入数据样例

invoiceDate列原始数据混杂两种格式:

0      16.09.2014
1      2014-09-16
2      02.12.2014
3      2014-12-02
4      09.01.2018

183    2015-03-30
184    12.04.2017
185    2017-04-12
186    28.12.2018
187    2018-12-28
Name: invoiceDate, Length: 188, dtype: object

稳定兼容的实现代码

通过分隔符拆分两类日期,分别指定解析规则,完全避免自动推断的错误,兼容所有Pandas版本:

import pandas as pd

# 按分隔符区分两类日期
is_dot_format = df['invoiceDate'].str.contains('.', regex=False)

# 点分隔格式严格按照dd.mm.yyyy解析
parsed_dot = pd.to_datetime(
    df.loc[is_dot_format, 'invoiceDate'],
    format='%d.%m.%Y',
    errors='coerce'
)
# 横杠分隔格式严格按照yyyy-mm-dd解析
parsed_dash = pd.to_datetime(
    df.loc[~is_dot_format, 'invoiceDate'],
    format='%Y-%m-%d',
    errors='coerce'
)

# 合并结果后统一格式化为目标格式,赋值回原列
df['invoiceDate'] = pd.concat([parsed_dot, parsed_dash]).sort_index().dt.strftime('%d.%m.%Y')

简便写法(适配Pandas 2.0+版本)

如果运行环境为Pandas 2.0及以上版本,可以直接用混合格式解析参数,指定日优先规则实现快速转换:

df['invoiceDate'] = pd.to_datetime(
    df['invoiceDate'],
    format='mixed',
    dayfirst=True,
    errors='coerce'
).dt.strftime('%d.%m.%Y')

输出结果

执行后所有日期会统一为%d.%m.%Y格式,和预期完全一致:

0      16.09.2014
1      16.09.2014
2      02.12.2014
3      02.12.2014
4      09.01.2018

183    30.03.2015
184    12.04.2017
185    12.04.2017
186    28.12.2018
187    28.12.2018
Name: invoiceDate, Length: 188, dtype: object

内容的提问来源于stack exchange,提问作者ysmnrn.csv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:48:16