Pandas:计算不同时区的两个Datetime列之间的差异



我有两个不同的时间序列。一个是从CET时区以字符串形式传递的一系列ms格式的时间戳。另一个是UTC时区中s格式的unix时间戳。

它们中的每一个都在一个较大数据帧中的一列中,没有一个是DatetimeIndex,也不应该是一个。

我需要将CET时间转换为UTC,然后计算两列之间的差异,我对Python和Pandas的Datetime功能以及各种不同的数据类型感到困惑。

这里有一个例子:

import pandas as pd
import pytz
germany = pytz.timezone('Europe/Berlin')
D1 = ["2016-08-22 00:23:58.254","2016-08-22 00:23:58.254",
"2016-08-22 00:23:58.254","2016-08-22 00:40:33.260",
"2016-08-22 00:40:33.260","2016-08-22 00:40:33.260"]
D2 = [1470031195, 1470031195, 1470031195, 1471772027, 1471765890, 1471765890]
S1 = pd.to_datetime(pd.Series(D1))
S2 = pd.to_datetime(pd.Series(D2),unit='s')

第一个问题

使用CCD_ 1。我需要程序来理解,S1中的数据不是UTC,而是CET。然而,像这样使用tz_localize似乎可以将给定的日期时间解释为CET,假设它以UTC开头:

F1 = S1.apply(lambda x: x.tz_localize(germany)).to_frame()

尝试tz_convert总是抛出以下内容:

TypeError:索引不是有效的DatetimeIndex或PeriodIndex

第二个问题

是的,即使它们都有相同的格式,我也被卡住了,因为我现在无法计算这两列之间的差异:

F1 = S1.apply(lambda x: x.tz_localize(germany)).to_frame()
F1.columns = ["CET"]
F2 = S2.apply(lambda x: x.tz_localize('UTC')).to_frame()
F2.columns = ["UTC"]
FF = pd.merge(F1,F2,left_index=True,right_index=True)
FF.CET-FF.UTC

ValueError:不可伸缩tz的日期时间减法操作

我需要一种方法来使用不是DatetimeIndex对象的具有tz意识的日期时间对象进行这些计算。

或者我需要一种方法使我的CET专栏看起来像这样:

2016-08-21 22:23:58.254
2016-08-21 22:23:58.254
2016-08-21 22:23:58.254
2016-08-21 22:40:33.260
2016-08-21 22:40:33.260
2016-08-21 22:40:33.260

也就是说,我不需要我的日期时间有tz意识,我只想通过添加/减去必要的时间量来自动转换它,并意识到夏令时。

如果没有DST,我可以对两个整数做一个简单的减法。

首先需要将CET时间戳转换为datetime并指定时区:

S1 = pd.to_datetime(pd.Series(D1))
T1_cet = pd.DatetimeIndex(S1).tz_localize('Europe/Berlin')

然后将UTC时间戳转换为日期时间,并指定时区以避免混淆:

S2 = pd.to_datetime(pd.Series(D2), unit='s')
T2_utc = pd.DatetimeIndex(S1).tz_localize('UTC')

现在将CET时间戳转换为UTC:

T1_utc = T1_cet.tz_convert('UTC')

最后计算时间戳之间的差异:

diff = pd.Series(T1_utc) - pd.Series(T2_utc)

相关内容

  • 没有找到相关文章

最新更新