如何在 Pandas 中转换 datetime 列的时区?

Posted

技术标签:

【中文标题】如何在 Pandas 中转换 datetime 列的时区?【英文标题】:How to convert time zones of datetime column in Pandas? 【发布时间】:2019-05-12 23:25:14 【问题描述】:

我有一列(非索引列),其中包含日期时间。例如,前五个条目如下所示:

[Timestamp('2018-11-15 19:57:55'),
 Timestamp('2018-11-15 19:59:46'),
 Timestamp('2018-11-15 20:00:59'),
 Timestamp('2018-11-15 20:01:41'),
 Timestamp('2018-11-15 20:01:54')]

我想将条目从 UTC 转换为太平洋时区。假设该列名为 times 我目前正在执行以下操作:

times.dt.tz_localize('GMT').dt.tz_convert('America/Los_Angeles')

虽然这成功地将列从 UTC 转换为 PST,但输出包含我不想要的无关组件。如下所示:

[Timestamp('2018-11-15 11:57:55-0800', tz='America/Los_Angeles'),
 Timestamp('2018-11-15 11:59:46-0800', tz='America/Los_Angeles'),
 Timestamp('2018-11-15 12:00:59-0800', tz='America/Los_Angeles'),
 Timestamp('2018-11-15 12:01:41-0800', tz='America/Los_Angeles'),
 Timestamp('2018-11-15 12:01:54-0800', tz='America/Los_Angeles')]

如何从时间戳中删除或忽略 -0800?谢谢!

【问题讨论】:

我看过了,但他们的输出格式为16:56:00-05:00,类似于我提出的问题。我不知道他们 05:00 代表什么或为什么会发生这种情况,但我不希望在我的输出中出现这种情况。 Converting time zone pandas dataframe的可能重复 【参考方案1】:

只需添加.tz_localize(None)的最后一步:

import pandas as pd
d = pd.Series(['2018-11-15 19:57:55', '2018-11-15 19:59:46'])
d = pd.to_datetime(d)
d
0   2018-11-15 19:57:55
1   2018-11-15 19:59:46
dtype: datetime64[ns]

d_pacific_tz_aware = d.dt.tz_localize("GMT").dt.tz_convert('America/Los_Angeles')
d_pacific_tz_aware
0   2018-11-15 11:57:55-08:00
1   2018-11-15 11:59:46-08:00
dtype: datetime64[ns, America/Los_Angeles]


d_pacific_tz_naive = d.dt.tz_localize("GMT").dt.tz_convert('America/Los_Angeles').dt.tz_localize(None)
d_pacific_tz_naive
0   2018-11-15 11:57:55
1   2018-11-15 11:59:46
dtype: datetime64[ns]

【讨论】:

以上是关于如何在 Pandas 中转换 datetime 列的时区?的主要内容,如果未能解决你的问题,请参考以下文章

python datetime pandas列转换

将 datetime64[ns, UTC] pandas 列转换为 datetime

python 将列转换为pandas to_datetime()

pandas datetime格式转换

将 float64 列转换为 datetime pandas 时出错

将 pandas 列从字符串 Quarters 和 Years 数组转换为 datetime 列