如何在Pandas中解析含US/Eastern时区的字符串为datetime类型?
问题
给定元组列表:
[('20230728 09:30:00 US/Eastern', 194.7, 195.26)]
创建DataFrame并将time列设为索引:
df = pd.DataFrame( received_historic_data, columns=["time", "open", "close"] ).set_index("time")
尝试用df.index = pd.to_datetime(df.index)将索引从字符串转为datetime类型时,Pandas无法解析其中的US/Eastern时区信息,如何解决?
解决方案
方法1:用dateutil.parser解析带时区字符串
借助dateutil的解析能力处理含时区的时间字符串(需确保安装python-dateutil,多数Pandas环境默认包含):
from dateutil import parser df.index = df.index.map(parser.parse)
解析后索引会变为带US/Eastern时区的datetime64[ns, US/Eastern]类型。
方法2:直接在pd.to_datetime中指定时区
通过tz参数明确指定时区,Pandas会自动匹配字符串中的时区标识:
df.index = pd.to_datetime(df.index, tz='US/Eastern')
若字符串格式特殊,可添加infer_datetime_format=True提升解析效率:
df.index = pd.to_datetime(df.index, tz='US/Eastern', infer_datetime_format=True)
方法3:先解析无时区时间,再绑定时区
如果前两种方法失效,可先解析为无时区datetime,再用tz_localize添加对应时区:
import pytz df.index = pd.to_datetime(df.index, format='%Y%m%d %H:%M:%S').tz_localize(pytz.timezone('US/Eastern'))
这种方法适合时区信息固定,且时间格式标准的场景。
内容的提问来源于stack exchange,提问作者Jason Strimpel
相关产品推荐
相关产品推荐

