根据各自的时区转换每一行的日期时间

时间:2021-07-26 09:42:46

标签: python datetime timezone

我想找出一种方法将一行的日期时间转换为其各自的时区。

例如,第 1 列是“用户名”,第 2 列是亚洲/加尔各答时区的“sent_time”,第 3 列是记录用户所在时区的“时区”。有没有办法将所有 'sent_time' 列值转换为其各自的时区?

以下是数据示例:

<头>
用户 ID 发送时间 app_timezone
12345 1610237077 美国/洛杉矶
25674 1610238621 美国/纽约
87940 1610238622 亚洲/加尔各答
23420 1610238622 欧洲/伦敦

1 个答案:

答案 0 :(得分:0)

这是你可以做的,

import pandas as pd

# dummy data:
# df
#    User Id   sent_time          app_timezone
# 0     12345  1610237077  America/Los_Angeles
# 1     25674  1610238621     America/New_York
# 2     87940  1610238622         Asia/Kolkata
# 3     23420  1610238622        Europe/London

# parse Unix time to datetime, to UTC
df['sent_time'] = pd.to_datetime(df['sent_time'], unit='s', utc=True)

# now we can derive the time in user's tz
df['sent_time_user'] = df.apply(lambda r: r['sent_time'].tz_convert(r['app_timezone']),
                                axis=1)

对于虚拟示例,您现在有

df['sent_time_user']
0    2021-01-09 10:34:37-08:00
1    2021-01-09 14:00:21-05:00
2    2021-01-10 00:30:22+05:30
3    2021-01-09 19:00:22+00:00
Name: sent_time_user, dtype: object

进一步阅读:tz_localizetz_convert。另请注意,您必须使用 apply / lambda 将“sent_time”系列的所有元素转换为各个时区,因为该方法仅将标量作为目标时区的参数.

相关问题