Python中将带时区的CSV时间戳列转为datetime类型的问题
解决方案:将带时区的时间戳转为datetime类型或去除时区部分
方法1:用Pandas批量转换(推荐,高效)
Pandas自带的to_datetime可以自动识别这种带时区的ISO格式,无需手动编写格式字符串,且支持列级批量操作,比循环逐行处理高效得多:
import pandas as pd # 将整个timestamps列转为带时区的datetime类型 df_usage['timestamps'] = pd.to_datetime(df_usage['timestamps']) # 若不需要时区信息,转为无时区的datetime df_usage['timestamps'] = pd.to_datetime(df_usage['timestamps']).dt.tz_localize(None)
方法2:修正strptime的格式字符串
你之前的报错是因为格式字符串没有匹配时区部分(+00:00),用%z格式符可以匹配这种时区偏移:
import datetime time = df_usage.iloc[i]['timestamps'] # 用%z匹配+HH:MM格式的时区偏移 time = datetime.datetime.strptime(time, '%Y-%m-%d %H:%M:%S%z') # 如需去掉时区,移除tzinfo属性 time = time.replace(tzinfo=None)
方法3:手动截取字符串去除时区部分
如果只需要处理字符串本身,可直接截取或分割掉时区部分:
# 方法A:截取前19个字符(对应"YYYY-MM-DD HH:MM:SS"的长度) time_str = df_usage.iloc[i]['timestamps'][:19] time = datetime.datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S') # 方法B:按"+"分割取前半部分 time_str = df_usage.iloc[i]['timestamps'].split('+')[0] time = datetime.datetime.strptime(time_str, '%Y-%m-%d %H:%M:%S')
内容的提问来源于stack exchange,提问作者Bradley Herro
相关产品推荐
相关产品推荐

