在 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
但是因为有不同的时区得到 object
s 而不是 datetimes
dtype:
print (df.dtypes)
time datetime64[ns]
timezone object
localized_time datetime64[ns, UTC]
new object
dtype: object
如前所述 (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
但是因为有不同的时区得到 object
s 而不是 datetimes
dtype:
print (df.dtypes)
time datetime64[ns]
timezone object
localized_time datetime64[ns, UTC]
new object
dtype: object