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

Pandas读取CSV日期格式异常,如何统一为DD-MM-YYYY?

问题描述

我的DataFrame中日期列存在两种格式:MM/DD/YY、mm/dd/yy,CSV文件最后5行的日期示例(MM/DD/YYYY格式)为:01/08/2018、01/05/2018、01/04/2018、01/03/2018、01/02/2018。使用代码df['Trade Date']= pd.to_datetime(df['Trade Date'],dayfirst=True)后,Pandas将部分日期识别为YYYY-DD-MM格式(如2018-08-01等)。尝试过解析、指定格式等方法均无效,希望将所有日期统一为DD-MM-YYYY格式,请问问题出在哪以及如何解决?

问题原因与解决方法

问题根源

  • dayfirst=True参数用反了:你的原始日期是「月/日/年」(MM/DD/YYYY)格式,但dayfirst=True会让Pandas把日期的第一部分解析为日、第二部分解析为月。比如01/08/2018会被当成「2018年8月1日」,完全不符合你的原始逻辑。
  • 混合格式干扰自动解析:列内同时存在MM/DD/YY和MM/DD/YYYY两种格式,Pandas的自动推断逻辑容易出现歧义,导致部分日期解析错误。

解决步骤

1. 正确解析为datetime类型

放弃dayfirst=True,根据你的原始日期格式,用以下两种方式解析:

  • 指定格式(推荐,解析速度快):直接告诉Pandas日期是「月/日/年」格式,兼容两位数和四位数年份:
df['Trade Date'] = pd.to_datetime(df['Trade Date'], format='%m/%d/%Y', errors='coerce')
  • 智能推断(适合格式灵活的场景):让Pandas自动识别日期规律,无需手动指定格式:
df['Trade Date'] = pd.to_datetime(df['Trade Date'], infer_datetime_format=True, errors='coerce')

其中errors='coerce'会把解析失败的日期转为NaT,方便后续排查异常数据。

2. 转换为DD-MM-YYYY格式

解析后的日期是datetime类型,要输出成「日-月-年」的字符串格式,使用dt.strftime()方法:

# 直接覆盖原列(转为字符串类型)
df['Trade Date'] = df['Trade Date'].dt.strftime('%d-%m-%Y')

# 或者新增列保留原datetime类型(推荐用于后续时间运算)
df['Formatted Trade Date'] = df['Trade Date'].dt.strftime('%d-%m-%Y')

3. 验证结果

执行代码后,用df.tail()查看最后5行,确认日期是否变为08-01-2018、05-01-2018等正确格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:02:53