Python-具有多个时区的pandas datetime列 [英] Python - pandas datetime column with multiple timezones
本文介绍了Python-具有多个时区的pandas datetime列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个包含多个用户和时区的数据框,例如:
I have a data frame with multiple users and timezones, like such:
cols = ['user', 'zone_name', 'utc_datetime']
data = [
[1, 'Europe/Amsterdam', pd.to_datetime('2019-11-13 11:14:15')],
[2, 'Europe/London', pd.to_datetime('2019-11-13 11:14:15')],
]
df = pd.DataFrame(data, columns=cols)
基于此其他帖子,我应用了以下更改以获取用户的本地日期时间:
Based on this other post, I apply the following change to get the user local datetime:
df['local_datetime'] = df.groupby('zone_name')[
'utc_datetime'
].transform(lambda x: x.dt.tz_localize(x.name))
输出以下内容:
user zone_name utc_datetime local_datetime
1 Europe/Amsterdam 2019-11-13 11:14:15 2019-11-13 11:14:15+01:00
2 Europe/London 2019-11-13 11:14:15 2019-11-13 11:14:15+00:00
不过, local_datetime
列是对象
并且我找不到一种方法来获取它,方法为 datetime64 [ns]
并采用以下格式(期望的输出):
However, the local_datetime
column is an object
and I cannot find a way to get it as datetime64[ns]
and in the following format (desired output):
user zone_name utc_datetime local_datetime
1 Europe/Amsterdam 2019-11-13 11:14:15 2019-11-13 12:14:15
2 Europe/London 2019-11-13 11:14:15 2019-11-13 11:14:15
推荐答案
我认为您需要 Series.dt.tz_convert
在lambda函数中:
I think you need Series.dt.tz_convert
in lambda function:
df['local_datetime'] = (pd.to_datetime(df.groupby('zone_name')['utc_datetime']
.transform(lambda x: x.dt.tz_localize('UTC').dt.tz_convert(x.name))
.astype(str).str[:-6]))
print(df)
user zone_name utc_datetime local_datetime
0 1 Europe/Amsterdam 2019-11-13 11:14:15 2019-11-13 12:14:15
1 2 Europe/London 2019-11-13 11:14:15 2019-11-13 11:14:15
这篇关于Python-具有多个时区的pandas datetime列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文