Python pandas convert unix timestamp with timezone into datetime
我有一个数据帧:
1 2 | df = pd.DataFrame({'unix_utc_ts': [1503007204222, 1503007210206, 1503007215121, 1503007220475], 'tz': ['+0000', '+0100', 'CEST', 'EEST']}) |
我想用时区将unix时间戳转换为datetime,所以我想要这样的东西:
1 | df['local_ts'] = pd.to_datetime(df['unix_utc_ts'], unit='ms', tz=df['tz']) |
上面的代码不起作用。 没有
1 2 3 4 5 | 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 |
但是我当然希望时区包含在datetime中,所以我想要这个数据帧:
1 2 3 4 5 | 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 |
我搜索并阅读了很多stackoverflow问题,但没有找到任何有效的答案:(
谢谢!
使用
1 2 3 4 5 6 | 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用于映射时区字符串,并且您列出的字符串不匹配(这是我找到的列表)。 所以你必须从你的时区名称到Pytz的映射。