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
相关产品推荐
相关产品推荐

