python - 从正确的 UTC 时间创建新的本地时间列
问题描述
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
推荐阅读
- c# - How to unit test multiple dependencies
- javascript - Mongoose update if exists, otherwise create a new one
- spring-boot - How to call/test Spring Boot Controllers in aws lamda locally
- swift - 以编程方式在不可见视图之间导航 iOS 13
- java - Dynamic query based on specified columns
- oracle - OCISG file system creation error failed to authenticate
- android - 如何在 xamarin 表单中使用 proguard 优化器工具
- selenium - 如何通过 Selenium 从 GUI 自动化的角度处理频繁的应用程序更改
- python - 如何使用 Python 和正则表达式替换符号之间的一组字母
- c++ - 如何恢复ffmpeg streamer网络断开一段时间但最终恢复