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

标签 python pandas datetime timezone

我有一个数据框:

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

我搜索并阅读了很多 stackoverflow 问题,但没有找到任何有效的答案:(

谢谢!

最佳答案

使用 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 的时区名称。

关于Python pandas 将带时区的 unix 时间戳转换为日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45965205/

相关文章:

sqlite - 使用 SQLite 进行透视查询

python - 使用 tf.data.Dataset.batch 时出现的问题

python - 如何让 Flask 方法在有或没有 token 作为路径元素的情况下工作

python - 在 Jinja 模板中指定字段宽度

python - 计算每行的字数

python - 如何根据pandas数据框中其他列的应用条件提取列值

PHP DateTime::modify 加减月份

python - Pandas 获得连续的行

python - 如何 reshape Pandas DataFrame 以显示列中的某些值是否每天存在?

javascript - 比较两种不同格式的时间戳 - GAS