根据正确的UTC时间创建新的本地时间列

叉车17
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)

我想用这个脚本做两件事。

  1. 在进行任何进一步的操作之前,我希望times.Time所有时间都是UTC中午12:00,而不是根据本地时区前后映射。理想情况下,我希望此脚本在世界上任何地方都可以运行,而不必手动考虑计算机的本地时区。
  2. 我想创建的第三列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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章