您可以使用该函数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
我可以通过将其设置为None来删除时区,但是结果将转换为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