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
相关产品推荐
相关产品推荐

