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

如何将DataFrame中不同格式的日期统一转换为YYYY-MM-DD格式?

解决日期格式转换错误的问题

你的问题出在pd.to_datetime默认的格式推断逻辑:它会把2/1/2023这类斜杠分隔的日期识别为月/日/年,所以错误地当成了2023年2月1日。结合你明确的日期规则(所有日期都是2023年1月,只有两种日/月/年格式),可以用以下两种可靠方法解决:

方法一:使用dayfirst参数强制优先识别日

设置dayfirst=True后,pandas会优先把日期字符串的第一个数字当作日,适配你两种格式的统一逻辑:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'ID': [1,2,3,4,5],
    'Date': ['1/1/2023', '2/1/2023', '2/1/2023', '31-01-2023', '31-01-2023']
})

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

转换后Date列会是datetime64类型,默认显示为YYYY-MM-DD格式。如果需要字符串类型的日期,追加.dt.strftime('%Y-%m-%d')即可:

df['Date'] = pd.to_datetime(df['Date'], dayfirst=True).dt.strftime('%Y-%m-%d')

方法二:明确指定两种日期格式(更严谨)

针对你给出的两种固定格式,直接用格式列表让pandas精准匹配(需要pandas 1.5.0及以上版本支持):

df['Date'] = pd.to_datetime(df['Date'], format=['%d/%m/%Y', '%d-%m-%Y'])
# 转字符串格式的话:
# df['Date'] = pd.to_datetime(df['Date'], format=['%d/%m/%Y', '%d-%m-%Y']).dt.strftime('%Y-%m-%d')

这种方式完全避免推断误差,因为你已经明确了所有可能的日期格式。

验证结果

执行后df['Date']的输出应为:

0    2023-01-01
1    2023-01-02
2    2023-01-02
3    2023-01-31
4    2023-01-31
Name: Date, dtype: datetime64[ns]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:12:50