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

Python读取Excel中带时区时间格式转时间序列报错求助

解决UTC时间字符串转datetime的报错问题

你的时间字符串是ISO 8601格式的UTC时间,包含T分隔符、7位毫秒和末尾的Z标识,但你使用的格式字符串%Y-%m-%d %H:%M:%S.%f未匹配这些额外部分,且Python的%f仅支持解析6位毫秒,这就是报错unconverted data remains: 6Z的原因。

以下是两种可行的解决方案:

方法1:手动调整格式字符串处理特殊部分

通过字符串预处理匹配格式要求,或者修正格式字符串适配原始时间结构:

import pandas as pd
from datetime import datetime

data = pd.read_excel(r"test.xlsx", sheet_name='Sheet1')

# 方案A:预处理字符串后转换
def parse_ts(ts):
    # 替换T为空格,截断7位毫秒到6位,去掉末尾Z
    cleaned = ts.replace('T', ' ')[:26]
    return datetime.strptime(cleaned, '%Y-%m-%d %H:%M:%S.%f')

timestamps = list(map(parse_ts, data['time']))
# 方案B:直接适配格式字符串,忽略毫秒第7位
dt_format = '%Y-%m-%dT%H:%M:%S.%fZ'
timestamps = [datetime.strptime(ts[:26] + ts[27:], dt_format) for ts in data['time']]

方法2:使用pandas自带的to_datetime(推荐)

pandas的to_datetime可以自动识别ISO 8601格式,无需手动编写格式规则,还能处理时区信息:

import pandas as pd

data = pd.read_excel(r"test.xlsx", sheet_name='Sheet1')
# 将time列转换为datetime类型(保留UTC时区)
data['time'] = pd.to_datetime(data['time'], utc=True)
# 转换为datetime列表用于绘图
timestamps = data['time'].tolist()

这种方法更简洁高效,处理结果也更规范,适合后续matplotlib绘图使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 20:33:24