[英]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.