簡體   English   中英

熊貓:計算來自不同時區的兩個Datetime列之間的差異

[英]Pandas: Calculate the difference between two Datetime columns from different timezones

我有兩個不同的時間序列。 一個是來自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')

第一個問題

tz_localize一起使用。 我需要程序來理解, 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意識的datetime對象進行這些計算。

另外,我需要一種使我的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

也就是說,我不需要知道日期時間,我只想通過添加/減去必要的時間並自動識別夏令時來自動轉換日期時間。

如果不是DST,我可以對兩個整數做一個簡單的減法。

首先,您需要將CET時間戳轉換為datetime並指定時區:

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

然后將UTC時間戳轉換為datetime並指定時區以避免混淆:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM