pandas.DataFrame.tz_localize #

数据框。tz_localize ( tz , axis = 0 , level = None , copy = None , ambigitude = 'raise' , nonexistent = 'raise' ) [来源] #

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

此操作本地化索引。要本地化 timezone-naive 系列中的值,请使用Series.dt.tz_localize()

参数
tz str 或 tzinfo 或无

要本地化的时区。通过None将删除时区信息并保留当地时间。

{0 或 'index', 1 或 'columns'}, 默认 0

要定位的轴

level int, str, 默认无

如果 axis 是 MultiIndex,则本地化特定级别。否则必须为 None。

复制布尔值,默认 True

还要复制基础数据。

笔记

copy关键字将改变 pandas 3.0 中的行为 。默认情况下会启用Copy-on-Write ,这意味着所有带有 copy关键字的方法都将使用惰性复制机制来推迟复制并忽略copy关键字。 copy关键字将在 pandas 的未来版本中删除

您已经可以通过启用写入时复制来获得未来的行为和改进pd.options.mode.copy_on_write = True

不明确的'infer'、bool-ndarray、'NaT'、默认 'raise'

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

  • “infer”将尝试根据订单推断秋季夏令时转换时间

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

  • 'NaT' 将在存在不明确时间的情况下返回 NaT

  • 如果存在不明确的时间,“raise”将引发 AmbigouslyTimeError。

不存在的str,默认 'raise'

不存在的时间不存在于因夏令时而时钟向前移动的特定时区中。有效值为:

  • 'shift_forward' 会将不存在的时间向前移动到最接近的现有时间

  • 'shift_backward' 会将不存在的时间向后移动到最接近的现有时间

  • 'NaT' 将在不存在的时间处返回 NaT

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

  • 如果时间不存在,“raise”将引发 NonExistentTimeError。

返回
系列/数据框

与输入的类型相同。

加薪
类型错误

如果 TimeSeries 是 tz 感知的并且 tz 不是 None。

例子

本地化当地时间:

>>> 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

传递 None 以转换为 tz-naive 索引并保留本地时间:

>>> s = pd.Series([1],
...               index=pd.DatetimeIndex(['2018-09-15 01:30:00+02:00']))
>>> s.tz_localize(None)
2018-09-15 01:30: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

在某些情况下,推断夏令时是不可能的。在这种情况下,您可以将 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