我正在努力了解如何将本地时间(使用DST)的时间序列从excel文件转换为UTC中的pandas时间序列。我已经尝试过.localize(),. replace(),. astimezone(),。to_datetime()的各种组合,一切都没有运气,我觉得我在应该的情况下得到一个不一致的结果(至少在我看来) )回归同样的事情。陷入困境核心的例子如下:如果有人能够解释为什么这两段代码会产生不同的答案,我将不胜感激。这些部分中的第一部分完成了我想要的。似乎第二个应该做同样的事情,但事实并非如此。
In[1]: UTCtz=timezone("UTC")
In[2]: localtz=timezone("US/Central")
In[3]: dt1=datetime.datetime(2016,3,13,1,0,0,0)
In[4]: dt2=datetime.datetime(2016,3,13,3,0,0,0)
In[5]: dt3=localtz.localize(dt1)
In[6]: dt3
Out[6]: datetime.datetime(2016, 3, 13, 1, 0, tzinfo=<DstTzInfo 'US/Central' CST-1 day, 18:00:00 STD>)
In[7]: dt4=localtz.localize(dt2)
In[8]: dt4
Out[8]: datetime.datetime(2016, 3, 13, 3, 0, tzinfo=<DstTzInfo 'US/Central' CDT-1 day, 19:00:00 DST>)
In[9]: dt3.astimezone(UTCtz)
Out[9]: datetime.datetime(2016, 3, 13, 7, 0, tzinfo=<UTC>)
In[10]: dt4.astimezone(UTCtz)
Out[10]: datetime.datetime(2016, 3, 13, 8, 0, tzinfo=<UTC>)
dt1和dt2跨越DST开关,转换为UTC是我所期待的。 或者,这是我从excel读到的系列中得到的数据帧(“timeindex”列)。
In[1]: df.iloc[2]["timeindex"]
Out[1]: Timestamp('2016-03-13 01:00:00')
In[2]: df.iloc[3]["timeindex"]
Out[2]: Timestamp('2016-03-13 03:00:00')
In[3]: localtz.localize(df.iloc[2]["timeindex"])
Out[3]: Timestamp('2016-03-13 01:00:00-0600', tz='US/Central')
In[4]: localtz.localize(df.iloc[3]["timeindex"])
Out[4]: Timestamp('2016-03-13 04:00:00-0500', tz='US/Central')
同样的函数调用如前,但时间之间的间隔增加了一个小时! 这是怎么回事?