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

CET/CEST时间序列转UTC出现AmbiguousTimeError的解决方案咨询

解决方案

核心思路是先补全本地时间的完整小时级序列,再执行时区转换,既解决数据断裂导致的AmbiguousTimeError问题,也能自动补全缺失值。

通用兼容代码

该代码对格式正常和异常的csv文件都适用:

import pandas as pd

# 读取文件
df = pd.read_csv('test_bad.csv')
# 转换为无时区的datetime格式,按时间升序排序
df['local_time'] = pd.to_datetime(df['local_time'])
df = df.sort_values('local_time').reset_index(drop=True)

# 1. 生成覆盖整个数据周期的完整小时级本地时间序列,补全缺失时间点
full_local_naive = pd.date_range(
    start=df['local_time'].min(),
    end=df['local_time'].max(),
    freq='H'
)
# 左合并实现缺失时间点补NaN
df_full = pd.DataFrame({'local_time': full_local_naive}).merge(df, on='local_time', how='left')

# 2. 执行时区转换,同时处理夏令时的两类特殊时间
df_full['utc_time'] = df_full['local_time']\
    .dt.tz_localize(
        'CET',
        ambiguous='infer',  # 自动推断冬令时切换时重复时间的时区
        non_existent='NaT'  # 标记夏令时切换时不存在的时间点为NaT
    )\
    .dt.tz_convert('UTC')\
    .dt.strftime('%Y-%m-%d %H:%M:%S')

# 可选:删除3月夏令时跳转时产生的无效NaT行(该时间点本身不存在)
df_full = df_full.dropna(subset=['utc_time']).reset_index(drop=True)

效果说明

针对你给出的异常文件test_bad.csv,处理后2017年10月29日的时段结果如下:

local_timevalueutc_time
2017-10-29 01:00:0072232017-10-28 23:00:00
2017-10-29 02:00:0072242017-10-29 00:00:00
2017-10-29 02:00:00NaN2017-10-29 01:00:00
2017-10-29 03:00:00NaN2017-10-29 02:00:00
2017-10-29 04:00:0072262017-10-29 03:00:00

完全符合需求:缺失的时间点自动补NaN,时区转换正常执行无报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:00