Spec-Zone.ru › pandas 2

pandas.Series.dt.tz_localize

Series.dt.tz_localize(*args, **kwargs)[source]

Локализация временной зоны для временных значений без привязки к временной зоне в массив/индекс DateTime.

Этот метод принимает объект массива/индекса DateTime без привязки к временной зоне и делает его привязанным к временной зоне. Он не перемещает время в другую временную зону.

Этот метод также может быть использован для обратного преобразования – создания объекта без привязки к временной зоне из объекта с привязкой. Для этого передайте tz=None.

Параметры:
tz:str, pytz.timezone, dateutil.tz.tzfile, datetime.tzinfo или None

Временная зона для преобразования временных меток. Передача None удалит информацию о временной зоне, сохранив локальное время.

ambiguous:‘infer’, ‘NaT’, массив bool, по умолчанию ‘raise’

Когда часы переводятся назад из-за перехода на летнее время, могут возникнуть неоднозначные моменты времени. Например, в Центральноевропейском времени (UTC+01), при переходе с 03:00 DST на 02:00 non-DST, 02:30:00 по местному времени соответствует 00:30:00 UTC и 01:30:00 UTC. В такой ситуации параметр ambiguous определяет, как следует обрабатывать неоднозначные моменты времени.

  • ‘infer’ попытается определить часы перехода на зимнее время на основе порядка

  • булевый массив, где True означает время DST, а False – время non-DST (обратите внимание, что этот флаг применим только к неоднозначным моментам времени)

  • ‘NaT’ вернёт NaT в случае неоднозначных моментов времени

  • ‘raise’ сгенерирует исключение AmbiguousTimeError, если неоднозначные моменты времени обнаружены.

nonexistent:‘shift_forward’, ‘shift_backward, ‘NaT’, timedelta, по умолчанию ‘raise’

Несуществующее время не существует в определенной временной зоне, когда часы переведены вперёд из-за перехода на летнее время.

  • ‘shift_forward’ сдвинет несуществующее время вперёд к ближайшему существующему времени

  • ‘shift_backward’ сдвинет несуществующее время назад к ближайшему существующему времени

  • ‘NaT’ вернёт NaT в случае несуществующих моментов времени

  • объекты timedelta сдвинут несуществующие моменты времени на указанную величину

  • ‘raise’ сгенерирует исключение NonExistentTimeError, если несуществующие моменты времени обнаружены.

Возвращает:
Тип, совпадающий с типом self

Массив/индекс, преобразованный в указанную временную зону.

Возможные исключения:
TypeError

Если массив/индекс DateTime с привязкой к временной зоне, а tz не равно None.

См. также

DatetimeIndex.tz_convert

Преобразование 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 в временной зоне US/Eastern:

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

Будьте внимательны к переходам на летнее время. При последовательных данных pandas может определить время перехода на летнее время:

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

В некоторых случаях определить переход на летнее время невозможно. В таких случаях вы можете передать массив ndarray в параметр ambiguous, чтобы явно указать время 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]

Если переход на летнее время приводит к несуществующим моментам времени, вы можете сдвинуть эти даты вперёд или назад с помощью объекта 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]

© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/2.2.2/reference/api/pandas.Series.dt.tz_localize.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API