您可以使用函数 tz_localize
使 Timestamp 或 DateTimeIndex 时区可感知,但是如何做到相反的事情: 如何将可感知时区的 Timestamp 转换为初始时区,同时保留其时区?
举个例子:
In [82]: t = pd.date_range(start="2013-05-18 12:00:00", periods=10, freq='s', tz="Europe/Brussels")
In [83]: t
Out[83]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: S, Timezone: Europe/Brussels
我可以通过将时区设置为 Nothing 来删除它,但是结果会被转换为 UTC (12点钟变成10点钟) :
In [86]: t.tz = None
In [87]: t
Out[87]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 10:00:00, ..., 2013-05-18 10:00:09]
Length: 10, Freq: S, Timezone: None
有没有其他方法可以将 DateTimeIndex 转换为时区幼稚,但同时保留它所设置的时区?
一些 背景的原因,我问这个: 我想与时区幼稚的时间序列(以避免额外的麻烦与时区,我不需要他们的情况下,我正在工作)。
但由于某些原因,我必须处理本地时区(欧洲/布鲁塞尔)中的时区感知时间序列。由于我所有的其他数据都是时区天真(但表示在我的本地时区) ,我想转换这个时间序列天真到进一步的工作,但它也必须表示在我的本地时区(所以只是删除时区信息,而不是转换 用户可见时间到 UTC)。
我知道时间实际上是内部存储为 UTC 的,只有当您表示它时才会转换为另一个时区,所以当我想要“去本地化”它时,必须进行某种转换。例如,使用 python datetime 模块,您可以像下面这样“删除”时区:
In [119]: d = pd.Timestamp("2013-05-18 12:00:00", tz="Europe/Brussels")
In [120]: d
Out[120]: <Timestamp: 2013-05-18 12:00:00+0200 CEST, tz=Europe/Brussels>
In [121]: d.replace(tzinfo=None)
Out[121]: <Timestamp: 2013-05-18 12:00:00>
因此,基于此,我可以执行以下操作,但我认为在处理更大的时间序列时,这样做效率不会很高:
In [124]: t
Out[124]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: S, Timezone: Europe/Brussels
In [125]: pd.DatetimeIndex([i.replace(tzinfo=None) for i in t])
Out[125]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-05-18 12:00:00, ..., 2013-05-18 12:00:09]
Length: 10, Freq: None, Timezone: None