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

使用pd.to_datetime转换CSV日期格式时出现不一致问题求助

解决pandas日期解析格式不一致的问题

这个问题我之前也踩过坑!核心原因是pandas自动推断日期格式时,遇到日和月都≤12的日期(比如01/01/2015),没法确定你用的是月/日/年还是日/月/年,默认采用了美式的月/日/年规则;但当日期数值超过12时(比如01/13/2015),因为不存在13月,pandas只能强制切换成日/月/年逻辑解析,这就导致同一列的日期解析规则混乱,后续调用.month或.year自然会出错。

直接上针对性解决方案:

  • 明确指定日期格式,禁止自动推断
    你必须告诉pandas原始日期的真实格式,避免它“猜格式”。先确认你的原始日期规则:

    • 如果原始格式是月/日/年(MM/DD/YYYY,比如01/01/2015代表2015年1月1日):
      wind['Date'] = pd.to_datetime(wind['Date'], format='%m/%d/%Y')
      
    • 如果原始格式是日/月/年(DD/MM/YYYY,比如01/01/2015代表2015年1月1日,13/01/2015代表2015年1月13日):
      wind['Date'] = pd.to_datetime(wind['Date'], format='%d/%m/%Y')
      
  • 保留pandas datetime64类型,无需转成Python原生date对象
    你之前用.dt.date把pandas的datetime类型转成了Python原生date对象,这完全没必要——pandas的datetime64类型支持更高效的矢量操作,直接用以下方式提取年月即可:

    # 提取月份
    wind['Month'] = wind['Date'].dt.month
    # 提取年份
    wind['Year'] = wind['Date'].dt.year
    

    转成原生date对象不仅会丢失pandas的操作优势,还可能引发类型不一致的问题。

最后可以拿几个有问题的日期验证:比如原始数据里的01/13/2015,如果解析后是2015-01-13,说明你的原始格式是月/日/年;如果原始数据是13/01/2015,解析后应该是2015-01-13,那就是日/月/年格式。指定格式后,所有日期的解析规则会完全统一,后续操作就不会再出错了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:17:12