2017-09-21 4 views
0

Ich suche nach drei Spalten zu meinem aktuellen Datenrahmen (utc_date, apac_date und Stunde).Python - Zeitzone konvertieren und Stunde abrufen

Ich erhalte erfolgreich zwei der drei Spalten, jedoch sollte die Stunde apac_date (17) entsprechen, aber es wird die Stunde für utc_date (9) zurückgegeben.

Jede Hilfe würde sehr geschätzt werden!

Dies ist der Ausgangsdatenrahmen:

import pandas as pd 
from tzlocal import get_localzone 
from pytz import timezone 
raw_data = { 
     'id': ['123456'], 
     'start_date': [pd.datetime(2017, 9, 21, 5, 30, 0)]} 
df = pd.DataFrame(raw_data, columns = ['id', 'start_date']) 
df 

Ergebnis:

id  start_date 
123456 2017-09-21 05:30:00 

Als nächstes konvertiere ich die Zeitzonen für utc und apac auf den Nutzer aktuelle Region basieren.

local_tz = get_localzone() 
df['utc_date'] = df['start_date'].apply(lambda x: x.tz_localize(local_tz).astimezone(timezone('utc'))) 
df['apac_date'] = df['utc_date'].apply(lambda x: x.tz_localize('utc').astimezone(timezone('Asia/Hong_Kong'))) 
df 

Ergebnis:

id  start_date   utc_date     apac_date 
123456 2017-09-21 05:30:00 2017-09-21 09:30:00+00:00 2017-09-21 17:30:00+08:00 

Als nächstes rufe ich die Stunde für die apac_date (es mir utc Stunde geben statt):

df['hour'] = df['apac_date'].apply(lambda x: int(x.strftime('%H'))) 
df 

Ergebnis:

id  start_date   utc_date     apac_date     hour 
123456 2017-09-21 05:30:00 2017-09-21 09:30:00+00:00 2017-09-21 17:30:00+08:00 9 

Antwort

0

können Sie versuchen mit:

df['apac_date'] = df['utc_date'].apply(lambda x: x.tz_convert('Asia/Hong_Kong')) 

Ich habe Fehler mit Ihrem obigen Code mit tz_localize() für eine Zeitzone, die bereits lokalisiert wurde.

Verwandte Themen