pandas.Series.tz_localize#

Series.tz_localize(tz, axis=0, level=None, copy=True, ambiguous='raise', nonexistent='raise')[源代码]#

将Series或DataFrame的Tz-naive索引本地化到目标时区。

此操作将本地化索引。要本地化时区原始系列中的值,请使用 Series.dt.tz_localize()

参数
tzStr或tzinfo
axis要本地化的轴
levelInt、str、默认为无

如果轴是多索引,则本地化特定级别。否则必须为None。

copy布尔值,默认为True

还要制作底层数据的副本。

ambiguous‘iner’,bool-ndarray,‘nat’,默认‘raise’

当时钟因DST向后移动时,可能会出现时间不明确的情况。例如,在中欧时间(UTC+01),当从DST 03:00到非DST 02:00时,当地时间02:30:00同时出现在UTC 00:30:00和01:30:00 UTC。在这种情况下, ambiguous 参数指示应如何处理不明确的时间。

  • INFER将尝试根据订单推断秋季DST过渡时间

  • Bool-ndarray其中True表示DST时间,False表示非DST时间(请注意,此标志仅适用于不明确的时间)

  • “NaT”将在时间不明确的地方返回NAT

  • 如果存在不明确的时间,‘Raise’将引发AmbiguousTimeError。

nonexistent字符串,默认‘RAISE’

在时钟由于DST而向前移动的特定时区中不存在不存在的时间。有效值包括:

  • ‘Shift_Forward’会将不存在的时间向前移动到最接近的现有时间

  • ‘Shift_Backup’会将不存在的时间向后移动到最接近的现有时间

  • “NaT”将返回不存在时间的NAT

  • 时间增量对象将按时间增量移动不存在的时间

  • 如果存在不存在的时间,“Raise”将引发非ExistentTimeError。

退货
系列或DataFrame

与输入类型相同。

加薪
TypeError

如果TimeSeries是TZ感知的,而TZ不是没有的。

示例

本地化本地时间:

>>> s = pd.Series([1],
...               index=pd.DatetimeIndex(['2018-09-15 01:30:00']))
>>> s.tz_localize('CET')
2018-09-15 01:30:00+02:00    1
dtype: int64

DST更改时要小心。当有顺序数据时,Pandas可以推断出DST时间:

>>> s = pd.Series(range(7),
...               index=pd.DatetimeIndex(['2018-10-28 01:30:00',
...                                       '2018-10-28 02:00:00',
...                                       '2018-10-28 02:30:00',
...                                       '2018-10-28 02:00:00',
...                                       '2018-10-28 02:30:00',
...                                       '2018-10-28 03:00:00',
...                                       '2018-10-28 03:30:00']))
>>> s.tz_localize('CET', ambiguous='infer')
2018-10-28 01:30:00+02:00    0
2018-10-28 02:00:00+02:00    1
2018-10-28 02:30:00+02:00    2
2018-10-28 02:00:00+01:00    3
2018-10-28 02:30:00+01:00    4
2018-10-28 03:00:00+01:00    5
2018-10-28 03:30:00+01:00    6
dtype: int64

在某些情况下,推断DST是不可能的。在这种情况下,您可以将ndarray传递给歧义参数以显式设置DST

>>> s = pd.Series(range(3),
...               index=pd.DatetimeIndex(['2018-10-28 01:20:00',
...                                       '2018-10-28 02:36:00',
...                                       '2018-10-28 03:46:00']))
>>> s.tz_localize('CET', ambiguous=np.array([True, True, False]))
2018-10-28 01:20:00+02:00    0
2018-10-28 02:36:00+02:00    1
2018-10-28 03:46:00+01:00    2
dtype: int64

如果DST转换导致时间不存在,则可以使用TimeDelta对象或 'shift_forward''shift_backward'

>>> s = pd.Series(range(2),
...               index=pd.DatetimeIndex(['2015-03-29 02:30:00',
...                                       '2015-03-29 03:30:00']))
>>> s.tz_localize('Europe/Warsaw', nonexistent='shift_forward')
2015-03-29 03:00:00+02:00    0
2015-03-29 03:30:00+02:00    1
dtype: int64
>>> s.tz_localize('Europe/Warsaw', nonexistent='shift_backward')
2015-03-29 01:59:59.999999999+01:00    0
2015-03-29 03:30:00+02:00              1
dtype: int64
>>> s.tz_localize('Europe/Warsaw', nonexistent=pd.Timedelta('1H'))
2015-03-29 03:30:00+02:00    0
2015-03-29 03:30:00+02:00    1
dtype: int64