pandas中将带FixedOffset的datetime转匹配格式解决相减报错问题
解决方案
你需要通过pandas datetime系列专属的.dt访问器处理时区转换,两种可选方案如下:
方案1:将带时区的美东时间转为无时区格式,与已有无时区EST时间对齐
直接使用tz_localize(None)去掉时区标识,转换后格式为datetime64[ns],和你第二个对象完全匹配:
# 生成无时区的美东时间序列 df['date_naive_est'] = df['date'].dt.tz_localize(None) # 直接计算差值 df['time_diff'] = df['date_naive_est'] - 你的另一个无时区EST时间序列
方案2(更稳妥,避免夏令时歧义):给无时区的EST时间加上对应时区标识,与带时区的美东时间对齐
如果你的无时区EST时间存在夏令时切换时段的歧义,优先用该方案:
from pytz import FixedOffset # 给无时区的EST时间添加美东时区标识 你的另一个时间序列名 = 你的另一个时间序列名.dt.tz_localize(FixedOffset(-240)) # 直接计算差值 df['time_diff'] = df['date'] - 你的另一个时间序列名
之前报错的原因说明
- 方法1报错:
strftime是单个datetime对象的方法,pandas Series需要通过.dt访问器调用,且转字符串再转时间属于冗余操作,完全没必要 - 方法2报错:你混淆了普通datetime对象的
replace方法和pandas Series的replace方法,后者是用来替换序列内的值,不支持修改时区参数 - 方法3报错:pandas没有
dt_tz这个属性,正确的时区相关操作都要通过.dt访问器下的tz、tz_localize、tz_convert等方法实现
内容的提问来源于stack exchange,提问作者oneday
相关产品推荐
相关产品推荐

