2017-08-30 202 views
0

我有一個數據幀:Python的大熊貓轉換Unix時間戳和時區到日期時間

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

我想轉換Unix時間戳與時區的日期時間,所以我想是這樣的:

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

上面的代碼不起作用。如果沒有tz說法我得到這個:

 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 

但我當然希望被列入日期時間時區,所以我想這個數據幀:

 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 

我已經搜索並閱讀了大量的問題計算器但沒有找到任何工作答案:(

謝謝!

回答

1

使用applytz_localize到E轉換ACH行:

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) 

但是,你將有一個問題,你的時區的格式。 Pytz用於映射時區字符串,並且列出的不匹配(here是我找到的列表)。所以你必須從時區名稱到Pytz's進行映射。