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

Python 具有不同时区的时间数组的时间戳减法,python,datetime,numpy,pandas,Python,Datetime,Numpy,Pandas,我从其他有类似问题的人那里得到了以下代码,但提出的解决方案在我的数据帧上不起作用。代码从给定日期减去数据帧索引: my_date = pd.datetime.today() MyDF['day_differential'] = (MyDF.index - my_date).days 在我的数据帧中生成以下错误: TypeError: Timestamp subtraction must have the same timezones or no timezones 我怎么知道两次约会的时间?

我从其他有类似问题的人那里得到了以下代码,但提出的解决方案在我的数据帧上不起作用。代码从给定日期减去数据帧索引:

my_date = pd.datetime.today()
MyDF['day_differential'] = (MyDF.index - my_date).days
在我的数据帧中生成以下错误:

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

我怎么知道两次约会的时间?如何使它们相同,以便计算它们之间的天数?

这里是一个答案,使用J.F.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
[12]中的

多年筹资框架指数
出[12]:
[2011-01-01 00:00:00+00:00, ..., 2011-01-01 04:00:00+00:00]
长度:5,频率:H,时区: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
[14]中的

多年筹资框架指数
出[14]:
[2011-01-01 00:00:00, ..., 2011-01-01 04:00:00]
长度:5,频率:H,时区:无

实际上它们必须有相同的格式,你能打印
MyDF.index
吗?据我所知,这是一个时间戳列表,你在做类似
[1,2,3,4,5]-9的事情,我的意思是说你在从对象列表中减去一个对象,你能清楚地定义你想要实现什么吗?您想从MyDF中的所有日期中减去my_日期还是尝试其他方法?请尝试
MyDF.index.tz_convert(None)-datetime.utcnow()
@J.F.Sebastian您应该将其作为答案发布,以便可以接受,而这个问题不会一直存在unanswered@EdChum您可以继续并将评论扩展为答案