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

pandas调用tz_localize设置欧洲时区触发NonExistentTimeError报错

报错原因

这个报错是夏令时切换导致的不存在时间点触发的:
欧洲/华沙(Europe/Warsaw)时区属于实行夏令时的区域,2022年3月27日是当年的夏令时切换日,当地时间到凌晨2点时会直接拨快1小时跳到凌晨3点,也就是说2022-03-27 02:00:00 ~ 02:59:59这个时间段在当地时区是完全不存在的。
你生成的30分钟间隔时间序列刚好覆盖了这个不存在的时间点,而tz_localize方法默认nonexistent="raise",遇到不存在的时间点就会直接抛出NonExistentTimeError。

解决方法

根据你的数据需求选对应方案即可:

  • 方案1:过滤掉不存在的时间点
    传入nonexistent="NaT"把不存在的时间点转成空值,后续直接删除空值即可:
    dates = dates.tz_localize('Europe/Warsaw', nonexistent='NaT')
    # 移除空时间点
    dates = dates.dropna()
    
  • 方案2:偏移对齐到合法时间
    如果不想丢失数据点,可以指定偏移规则,把不存在的时间点对齐到夏令时切换前后的合法时间:
    # 不存在的时间点向前偏移,对齐到夏令时切换后的第一个合法时间(即2022-03-27 03:00)
    dates = dates.tz_localize('Europe/Warsaw', nonexistent='shift_forward')
    
    # 也可以选择向后偏移,对齐到夏令时切换前的最后一个合法时间
    # dates = dates.tz_localize('Europe/Warsaw', nonexistent='shift_backward')
    
  • 方案3:创建时间索引时直接指定时区(推荐)
    最稳妥的方式是不要先生成无时区时间再做本地化,直接在date_range阶段传入时区参数,pandas会自动处理夏令时跳转逻辑,不会生成不存在的非法时间点:
    dates = pd.date_range(
        start="2022-01-01",
        end="2022-06-25",
        freq="30min",
        tz="Europe/Warsaw"
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:01:02