时间戳减去具有不同时区的时间数组

时间:2015-01-31 17:26:23

标签: python datetime numpy pandas

我有来自其他有类似问题的代码,但提出的解决方案对我的DataFrame不起作用。该代码从给定日期中减去Pandas DataFrame索引:

my_date = pd.datetime.today()
MyDF['day_differential'] = (MyDF.index - my_date).days

在我的DataFrame中生成以下错误:

TypeError: Timestamp subtraction must have the same timezones or no timezones

我如何找到两个日期的tz?如何使它们相同,以便我可以计算它们之间的天数?

1 个答案:

答案 0 :(得分:3)

这是一个使用JF Sebastian的评论的答案真的要感谢他,因为你的索引有时区信息,那么操作也必须是时区感知的,在你的情况下时区是utc所以你需要生成一个utc时间戳来执行减法:

In [11]:

import pandas as pd
import numpy as np
import datetime as dt
my_date = pd.datetime.today()
MyDF = pd.DataFrame({'a':np.random.randn(5)})
MyDF.index = pd.date_range('1/1/2011', periods=5, freq='H', tz='utc')
MyDF['day_differential'] = MyDF.index.tz_convert(None) - dt.datetime.utcnow()
MyDF
Out[11]:
                                  a            day_differential
2011-01-01 00:00:00+00:00  1.399602 -1493 days +13:04:06.875715
2011-01-01 01:00:00+00:00 -1.962517 -1493 days +14:04:06.875715
2011-01-01 02:00:00+00:00 -1.574531 -1493 days +15:04:06.875715
2011-01-01 03:00:00+00:00 -0.224702 -1493 days +16:04:06.875715
2011-01-01 04:00:00+00:00 -0.800772 -1493 days +17:04:06.875715

您可以通过输入索引来查明您的索引是否符合时区:

In [12]:

MyDF.index
Out[12]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-01-01 00:00:00+00:00, ..., 2011-01-01 04:00:00+00:00]
Length: 5, Freq: H, Timezone: UTC

与非时区感知索引进行比较:

In [14]:

MyDF.index
Out[14]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2011-01-01 00:00:00, ..., 2011-01-01 04:00:00]
Length: 5, Freq: H, Timezone: None