from datetime import datetime
import pandas as pd
import pytz
times = pd.DataFrame(
{'Time':['2020-03-14 12:00:00']*5,
'TimeZone':['US/Pacific','US/Arizona','US/Mountain',
'US/Central','US/Eastern']})
times.Time = times.Time.map(
lambda x: datetime.fromisoformat(x).astimezone(pytz.utc))
times.TimeZone = times.TimeZone.map(pytz.timezone)
我想用这个脚本做两件事。
times.Time
所有时间都是UTC中午12:00,而不是根据本地时区前后映射。理想情况下,我希望此脚本在世界上任何地方都可以运行,而不必手动考虑计算机的本地时区。datetime
是同时作为对象times.Time
,但在times.TimeZone
时区。我怎样才能做到这一点?
对于#1,您应该使用,pd.to_datetime
然后使用tz_localize
。对于#2,它是tz_convert
:
times['Time'] = pd.to_datetime(times['Time']).dt.tz_localize('utc')
times['TimeZone'] = times['TimeZone'].map(pytz.timezone)
# This operation is not vectorized (read: slow)
times['LocalTime'] = times.apply(lambda row: row['Time'].tz_convert(row['TimeZone']), axis=1)
结果:
Time TimeZone LocalTime
0 2020-03-14 12:00:00+00:00 US/Pacific 2020-03-14 05:00:00-07:00
1 2020-03-14 12:00:00+00:00 US/Arizona 2020-03-14 05:00:00-07:00
2 2020-03-14 12:00:00+00:00 US/Mountain 2020-03-14 06:00:00-06:00
3 2020-03-14 12:00:00+00:00 US/Central 2020-03-14 07:00:00-05:00
4 2020-03-14 12:00:00+00:00 US/Eastern 2020-03-14 08:00:00-04:00
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句