pandas.Series.dt.tz_localize#

Series.dt.tz_localize(*args, **kwargs)[источник]#

Локализация Datetime Array/Index без часового пояса в Datetime Array/Index с часовым поясом.

Этот метод принимает объект Datetime Array/Index без часового пояса (tz) и делает его осведомленным о часовом поясе. Он не перемещает время в другой часовой пояс.

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

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

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

неоднозначный'infer', 'NaT', bool массив, по умолчанию 'raise'

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

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

  • bool-ndarray, где True означает время летнего времени, False означает время не летнего времени (обратите внимание, что этот флаг применим только для неоднозначных времён)

  • ‘NaT’ вернет NaT там, где есть неоднозначные времена

  • 'raise' вызовет AmbiguousTimeError, если есть неоднозначные времена.

несуществующий‘shift_forward’, ‘shift_backward, ‘NaT’, timedelta, по умолчанию ‘raise’

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

  • 'shift_forward' сместит несуществующее время вперед до ближайшего существующего времени

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

  • ‘NaT’ вернет NaT там, где есть несуществующие времена

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

  • 'raise' вызовет ошибку NonExistentTimeError, если есть несуществующие времена.

Возвращает:
Того же типа, что и self

Массив/Индекс преобразован в указанный часовой пояс.

Вызывает:
TypeError

Если Datetime Array/Index учитывает часовой пояс и 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, чтобы явно установить летнее время

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