在 Pandas DataFrame 中合并日期时间和时区列(tz_localize 来自列)

Combine datetime and timezone columns in a Pandas DataFrame (tz_localize from column)

如前所述 (Converting time zone pandas dataframe),Pandas 提供了将 datetime 列 (tz_localize) 本地化并将时区 (tz_convert) 转换为预定义的时区。例如:

df["localized_time"] = df.time.tz_localize(pytz.utc).tz_convert("Some/Timezone")

但是,这两个函数都接受时区本身作为参数。如果时区来自同一数据框中的另一列怎么办?例如:

   time                 timezone        ...
0  2022-04-11 12:24:43  "Europe/Paris"  ...
1  2022-04-11 04:22:12  "US/Eastern"    ...
...

有没有一种简单的方法可以将“时间”列(已经是 datetime 类型)与采用“时区”列(字符串)的时区结合起来?

是的,这是可能的,例如通过:

df["localized_time"] = df.time.dt.tz_localize(pytz.utc)

df['new'] = df.apply(lambda x: x["localized_time"].tz_convert(x["timezone"]), 1)
print (df)
                 time      timezone            localized_time  \
0 2022-04-11 12:24:43  Europe/Paris 2022-04-11 12:24:43+00:00   
1 2022-04-11 04:22:12    US/Eastern 2022-04-11 04:22:12+00:00   

                         new  
0  2022-04-11 14:24:43+02:00  
1  2022-04-11 00:22:12-04:00 

但是因为有不同的时区得到 objects 而不是 datetimes dtype:

print (df.dtypes)
time                   datetime64[ns]
timezone                       object
localized_time    datetime64[ns, UTC]
new                            object
dtype: object