Python pandas将带时区的unix时间戳转换为datetim

2024-04-16 23:32:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧:

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

我想把unix时间戳转换成带时区的datetime,所以我想要这样的东西:

^{pr2}$

上面的代码不起作用。如果没有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

但我当然希望时区包含在datetime中,所以我想要这个数据帧:

      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问题,但没有找到任何有效的答案:(

谢谢你!在


Tags: 数据代码dataframedf参数datetime时间unix
1条回答
网友
1楼 · 发布于 2024-04-16 23:32:45

使用applytz_localize转换每一行:

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的

相关问题 更多 >