pandas.arrays.DatetimeArray.tz_localize
-
DatetimeArray.tz_localize(tz, ambiguous='raise', nonexistent='raise', errors=None)[source] -
Локализация часового пояса для массива/индекса Datetime, не связанного с часовым поясом, в массив/индекс Datetime, связанный с часовым поясом.
Этот метод принимает объект массива/индекса Datetime, не связанный с часовым поясом, и делает его связанным с часовым поясом. Он не перемещает время в другой часовой пояс. Локализация часового пояса помогает переключаться с объектов, связанных с часовым поясом, на объекты, не связанные с часовым поясом.
Параметры: -
tz : string, pytz.timezone, dateutil.tz.tzfile or None -
Часовой пояс, в который необходимо преобразовать отметки времени. Передача
Noneудалит информацию о часовом поясе, сохранив местное время. -
ambiguous : ‘infer’, ‘NaT’, bool array, default ‘raise’ -
Когда часы двигались назад из-за перехода на летнее время, могут возникнуть неоднозначные моменты времени. Например, в центральноевропейском времени (UTC+01), при переходе с 03:00 по летнему времени на 02:00 по зимнему времени, 02:30:00 по местному времени соответствует как 00:30:00 по UTC, так и 01:30:00 по UTC. В такой ситуации параметр
ambiguousопределяет, как следует обрабатывать неоднозначные моменты времени.- ‘infer’ попытается определить часы перехода на зимнее время по заказу
- массив bool, где True означает время летнего времени, False означает время зимнего времени (обратите внимание, что этот флаг применим только к неоднозначным моментам времени)
- ‘NaT’ возвращает NaT, когда существуют неоднозначные моменты времени
- ‘raise’ сгенерирует AmbiguousTimeError, если существуют неоднозначные моменты времени
-
nonexistent : ‘shift_forward’, ‘shift_backward, ‘NaT’, timedelta, -
по умолчанию ‘raise’
Несуществующее время не существует в определенном часовом поясе, где часы перевели на летнее время.
- ‘shift_forward’ переместит несуществующее время вперед к ближайшему существующему времени
- ‘shift_backward’ переместит несуществующее время назад к ближайшему существующему времени
- ‘NaT’ вернет NaT, когда существуют несуществующие моменты времени
- объекты timedelta сместят несуществующие моменты времени на указанное значение
- ‘raise’ сгенерирует NonExistentTimeError, если существуют несуществующие моменты времени
В версии 0.24.0.
-
errors : {‘raise’, ‘coerce’}, default None -
- ‘raise’ сгенерирует NonExistentTimeError, если отметка времени не является допустимой в указанном часовом поясе (например, из-за перехода на летнее или зимнее время). Используйте
nonexistent='raise'вместо этого. - ‘coerce’ вернет NaT, если отметку времени невозможно преобразовать в указанный часовой пояс. Используйте
nonexistent='NaT'вместо этого.
Устарело начиная с версии 0.24.0.
- ‘raise’ сгенерирует NonExistentTimeError, если отметка времени не является допустимой в указанном часовом поясе (например, из-за перехода на летнее или зимнее время). Используйте
Возвращает: -
result : same type as 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='D')С помощью
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='D')Будьте осторожны с переходами на летнее время. При последовательных данных 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’) 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 в параметр 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’] -
© 2008–2012, 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/0.24.2/reference/api/pandas.arrays.DatetimeArray.tz_localize.html