2017-08-30 4 views
0

Ich habe einen Datenrahmen:Python Pandas Datetime-Unix-Zeitstempel mit Zeitzone in konvertieren

df = pd.DataFrame({'unix_utc_ts': [1503007204222, 1503007210206, 1503007215121, 
    1503007220475], 'tz': ['+0000', '+0100', 'CEST', 'EEST']}) 

Und ich will Unix mit Zeitzone Zeitstempel in Datetime konvertieren, so möchte ich etwas wie folgt aus:

df['local_ts'] = pd.to_datetime(df['unix_utc_ts'], unit='ms', tz=df['tz']) 

Der obige Code funktioniert nicht. Ohne das tz Argument bekomme ich dies:

 tz unix_utc_ts     utc_ts 
0 +0000 1503007204222 2017-08-17 22:00:04.222 
1 +0100 1503007210206 2017-08-17 22:00:10.206 
2 CEST 1503007215121 2017-08-17 22:00:15.121 
3 EEST 1503007220475 2017-08-17 22:00:20.475 

Aber natürlich mag ich Zeitzone in Datetime enthalten sein, so will ich diesen Datenrahmen:

 tz unix_utc_ts     utc_ts    local_ts 
0 +0000 1503007204222 2017-08-17 22:00:04.222 2017-08-17 22:00:04.222 
1 +0100 1503007210206 2017-08-17 22:00:10.206 2017-08-17 23:00:10.206 
2 CEST 1503007215121 2017-08-17 22:00:15.121 2017-08-18 00:00:15.121 
3 EEST 1503007220475 2017-08-17 22:00:20.475 2017-08-18 01:00:20.475 

Ich habe gesucht und gelesen viele Fragen Stackoverflow aber fanden keine Arbeits Antwort :(

Thank you!

Antwort

1

Verwenden apply und tz_localize konvertieren e ACH Reihe:

import pandas as pd 
df = pd.DataFrame({'unix_utc_ts': [1503007204222, 1503007210206, 1503007215121, 
1503007220475], 'tz': ['CEST', 'EEST', 'CEST', 'EEST']}) 

df['datetime_utc'] = pd.to_datetime(df['unix_utc_ts'], unit='ms') 
df['datetime_local'] = df.apply(lambda x: x['datetime_utc'].tz_localize(x['tz']), axis=1) 

jedoch, werden Sie ein Problem mit dem Format der Zeitzonen haben. Pytz wird verwendet, um Zeitzonenzeichenfolgen zuzuordnen, und die von Ihnen aufgelisteten stimmen nicht überein (here ist eine Liste, die ich von ihnen gefunden habe). Du musst also eine Zuordnung von deinen Zeitzonennamen zu Patz machen.

Verwandte Themen