pandas.Series.dt.tz_localize#

Series.dt.tz_localize(*args, **kwargs)[源代码]#

将tz-naive DateTime数组/索引本地化为TZ感知的DateTime数组/索引。

此方法采用时区(Tz)原始的DateTime数组/索引对象,并使其能够识别时区。它不会将时间移动到另一个时区。

此方法还可用于执行相反操作--从可识别对象创建时区未知对象。为此,请不要 tz=None

参数
tzStr、pytz.timezone、Dateutil.tz.tz文件或无

要将时间戳转换为的时区。传球 None 将删除保留当地时间的时区信息。

ambiguous‘INFER’,‘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‘Shift_Forward’,‘Shift_Backward,’NAT‘,TimeDelta,默认’RAISE‘

在时钟由于DST而向前移动的特定时区中不存在不存在的时间。

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

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

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

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

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

退货
与自己相同的类型

数组/索引已转换为指定时区。

加薪
TypeError

如果DateTime数组/索引是Tz感知的,并且Tz不是None。

参见

DatetimeIndex.tz_convert

将TZ感知的DatetimeIndex从一个时区转换为另一个时区。

示例

>>> tz_naive = pd.date_range('2018-03-01 09:00', periods=3)
>>> tz_naive
DatetimeIndex(['2018-03-01 09:00:00', '2018-03-02 09:00:00',
               '2018-03-03 09:00:00'],
              dtype='datetime64[ns]', freq='D')

本地化美国/东部时区的DatetimeIndex:

>>> tz_aware = tz_naive.tz_localize(tz='US/Eastern')
>>> tz_aware
DatetimeIndex(['2018-03-01 09:00:00-05:00',
               '2018-03-02 09:00:00-05:00',
               '2018-03-03 09:00:00-05:00'],
              dtype='datetime64[ns, US/Eastern]', freq=None)

使用 tz=None ,我们可以删除时区信息,同时保留当地时间(不转换为UTC):

>>> tz_aware.tz_localize(None)
DatetimeIndex(['2018-03-01 09:00:00', '2018-03-02 09:00:00',
               '2018-03-03 09:00:00'],
              dtype='datetime64[ns]', freq=None)

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

>>> s = pd.to_datetime(pd.Series(['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.dt.tz_localize('CET', ambiguous='infer')
0   2018-10-28 01:30:00+02:00
1   2018-10-28 02:00:00+02:00
2   2018-10-28 02:30:00+02:00
3   2018-10-28 02:00:00+01:00
4   2018-10-28 02:30:00+01:00
5   2018-10-28 03:00:00+01:00
6   2018-10-28 03:30:00+01:00
dtype: datetime64[ns, CET]

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

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

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

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