将 PDT/PST 时区列转换为 UTC 时区
Converting PDT/PST timezone column to UTC timezone
我有一个包含 PDT 和 PST 日期时间值的 pandas 列。
示例:
PDT/PST
2021-10-29 00:18:38 PDT
2021-10-29 01:08:19 PDT
2021-11-08 19:43:58 PST
2021-11-08 19:56:01 PST
我需要将它们转换成 UTC 时区。
示例:
UTC
2021-10-29 07:18:00
感谢简单的回答。
使用to_datetime
with convert strings to datetimes by dateparser.parse
:
import dateparser
df['PDT/PST'] = pd.to_datetime(df['PDT/PST'].apply(dateparser.parse), utc=True)
print (df)
PDT/PST
0 2021-10-29 07:18:38+00:00
1 2021-10-29 08:08:19+00:00
2 2021-11-09 03:43:58+00:00
3 2021-11-09 03:56:01+00:00
最后添加 Series.dt.tz_localize
与 None
:
df['PDT/PST'] = (pd.to_datetime(df['PDT/PST'].apply(dateparser.parse), utc=True)
.dt.tz_localize(None))
print (df)
PDT/PST
0 2021-10-29 07:18:38
1 2021-10-29 08:08:19
2 2021-11-09 03:43:58
3 2021-11-09 03:56:01
将 PST
和 PDT
替换为 -7
或 -8
的解决方案是:
df['PDT/PST'] = (pd.to_datetime(df['PDT/PST']
.replace({'PDT':'-07:00','PST':'-08:00'}, regex=True), utc=True)
.dt.tz_localize(None))
print (df)
PDT/PST
0 2021-10-29 07:18:38
1 2021-10-29 08:08:19
2 2021-11-09 03:43:58
3 2021-11-09 03:56:01
另一种选择:dateutil 的解析器提供了 tzinfos;然后转换为 UTC。
import dateutil
pacific_tz = dateutil.tz.gettz("US/Pacific")
df['UTC'] = df['PDT/PST'].apply(dateutil.parser.parse,
tzinfos={'PST': pacific_tz,
'PDT': pacific_tz}).dt.tz_convert('UTC')
df['UTC']
0 2021-10-29 07:18:38+00:00
1 2021-10-29 08:08:19+00:00
2 2021-11-09 03:43:58+00:00
3 2021-11-09 03:56:01+00:00
Name: UTC, dtype: datetime64[ns, UTC]
相关:Python strptime() and timezones?
现在您可以根据需要格式化为具有特定格式的字符串,例如
df['UTC'].dt.strftime('%Y-%m-%d %H:%M:%S')
0 2021-10-29 07:18:38
1 2021-10-29 08:08:19
2 2021-11-09 03:43:58
3 2021-11-09 03:56:01
Name: UTC, dtype: object
我有一个包含 PDT 和 PST 日期时间值的 pandas 列。 示例:
PDT/PST |
---|
2021-10-29 00:18:38 PDT |
2021-10-29 01:08:19 PDT |
2021-11-08 19:43:58 PST |
2021-11-08 19:56:01 PST |
我需要将它们转换成 UTC 时区。 示例:
UTC |
---|
2021-10-29 07:18:00 |
感谢简单的回答。
使用to_datetime
with convert strings to datetimes by dateparser.parse
:
import dateparser
df['PDT/PST'] = pd.to_datetime(df['PDT/PST'].apply(dateparser.parse), utc=True)
print (df)
PDT/PST
0 2021-10-29 07:18:38+00:00
1 2021-10-29 08:08:19+00:00
2 2021-11-09 03:43:58+00:00
3 2021-11-09 03:56:01+00:00
最后添加 Series.dt.tz_localize
与 None
:
df['PDT/PST'] = (pd.to_datetime(df['PDT/PST'].apply(dateparser.parse), utc=True)
.dt.tz_localize(None))
print (df)
PDT/PST
0 2021-10-29 07:18:38
1 2021-10-29 08:08:19
2 2021-11-09 03:43:58
3 2021-11-09 03:56:01
将 PST
和 PDT
替换为 -7
或 -8
的解决方案是:
df['PDT/PST'] = (pd.to_datetime(df['PDT/PST']
.replace({'PDT':'-07:00','PST':'-08:00'}, regex=True), utc=True)
.dt.tz_localize(None))
print (df)
PDT/PST
0 2021-10-29 07:18:38
1 2021-10-29 08:08:19
2 2021-11-09 03:43:58
3 2021-11-09 03:56:01
另一种选择:dateutil 的解析器提供了 tzinfos;然后转换为 UTC。
import dateutil
pacific_tz = dateutil.tz.gettz("US/Pacific")
df['UTC'] = df['PDT/PST'].apply(dateutil.parser.parse,
tzinfos={'PST': pacific_tz,
'PDT': pacific_tz}).dt.tz_convert('UTC')
df['UTC']
0 2021-10-29 07:18:38+00:00
1 2021-10-29 08:08:19+00:00
2 2021-11-09 03:43:58+00:00
3 2021-11-09 03:56:01+00:00
Name: UTC, dtype: datetime64[ns, UTC]
相关:Python strptime() and timezones?
现在您可以根据需要格式化为具有特定格式的字符串,例如
df['UTC'].dt.strftime('%Y-%m-%d %H:%M:%S')
0 2021-10-29 07:18:38
1 2021-10-29 08:08:19
2 2021-11-09 03:43:58
3 2021-11-09 03:56:01
Name: UTC, dtype: object