我想找出一种方法将一行的日期时间转换为其各自的时区。
例如,第 1 列是“用户名”,第 2 列是亚洲/加尔各答时区的“sent_time”,第 3 列是记录用户所在时区的“时区”。有没有办法将所有 'sent_time' 列值转换为其各自的时区?
以下是数据示例:
用户 ID | 发送时间 | app_timezone |
---|---|---|
12345 | 1610237077 | 美国/洛杉矶 |
25674 | 1610238621 | 美国/纽约 |
87940 | 1610238622 | 亚洲/加尔各答 |
23420 | 1610238622 | 欧洲/伦敦 |
答案 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_localize 和 tz_convert。另请注意,您必须使用 apply
/ lambda
将“sent_time”系列的所有元素转换为各个时区,因为该方法仅将标量作为目标时区的参数.