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

Python中EDT时间字符串转DateTime报格式错误如何解决

问题原因

你编写的格式字符串本身没有语法错误,报错的核心疏漏是Python标准datetime.strptime的%Z标识符存在系统依赖限制:它仅能识别当前操作系统本地注册的时区缩写,如果你设备的默认时区不是北美东部时区,EDT这类非本地时区缩写会直接匹配失败,抛出格式错误。

另外你直接调用pd.to_datetime速度慢是因为没有手动指定格式,pandas自动推断日期格式会遍历所有数据做格式猜测,自然耗时久;精度丢失、时区警告也和未正确指定格式、默认时区处理逻辑有关。

解决方案

方法1:指定格式+时区映射(速度最快,精度无损失)

如果你的数据时区固定为EDT,推荐用该方案,全程无自动推断,性能远高于默认pd.to_datetime调用,完全保留原始精度:

import pandas as pd

# 拆分原始时间字符串的时区部分和时间主体部分
time_split = tripOrig[' Time'].str.rsplit(' ', n=1, expand=True)
time_body = time_split[0]

# 指定格式转换时间主体,不需要处理时区所以不会报错
tripOrig['correct_date'] = pd.to_datetime(time_body, format='%d-%b-%Y %H:%M:%S.%f')

# 给datetime列补时区信息,EDT对应America/New_York时区(自动适配夏令时/冬令时)
tripOrig['correct_date'] = tripOrig['correct_date'].dt.tz_localize('America/New_York')

# 转整数时间戳供ML使用,可按需选择单位,不会丢失秒级精度
# 示例转为微秒级整数:
tripOrig['timestamp_int'] = tripOrig['correct_date'].astype('int64') // 1000
# 若只需要秒级整数,改为 // 10**9 即可

方法2:兼容多时区缩写方案

如果你的数据中存在多种不同时区缩写,可以用dateutil的解析器处理,无需手动拆分时区:

from dateutil import parser
import pandas as pd

# 配置时区缩写对应的偏移量,可按需扩展
tz_map = {
    "EDT": -4 * 3600,
    "EST": -5 * 3600
    # 其他时区按格式补充即可
}

# 批量转换
tripOrig['correct_date'] = tripOrig[' Time'].apply(lambda x: parser.parse(x, tzinfos=tz_map))

该方案适配性更强,批量处理速度略低于方法1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:36:08