pandas.DataFrame.tz_localize
- DataFrame.tz_localize(tz, axis=0, level=None, copy=None, ambiguous='raise', nonexistent='raise')[source]
-
Локализация временной зоны для индекса Series или DataFrame, который не имеет информации о временной зоне.
Эта операция локализует индекс. Для локализации значений в Series, не содержащей информации о временной зоне, используйте
Series.dt.tz_localize().- Параметры:
-
- tz:строка или tzinfo или None
-
Временная зона для локализации. Передача
Noneудалит информацию о временной зоне и сохранит местное время. - axis:{0 или ‘index’, 1 или ‘columns’}, по умолчанию 0
-
Ось для локализации
- level:целое число, строка, по умолчанию None
-
Если ось является MultiIndex, локализуется определённый уровень. В противном случае должно быть None.
- copy:булево значение, по умолчанию True
-
Также создаётся копия базовых данных.
Примечание
Ключевое слово copy изменит поведение в pandas 3.0. Copy-on-Write будет включено по умолчанию, что означает, что все методы с ключевым словом copy будут использовать механизм ленивой копии, чтобы отложить копирование и игнорировать ключевое слово copy. Ключевое слово copy будет удалено в будущей версии pandas.
Вы уже можете получить будущие поведение и улучшения, включив copy on write
pd.options.mode.copy_on_write = True - ambiguous:'infer', bool-ndarray, 'NaT', по умолчанию 'raise'
-
При изменении времени из-за перехода на летнее/зимнее время могут возникнуть неоднозначные моменты времени. Например, в Центральноевропейском времени (UTC+01), при переходе с 03:00 DST на 02:00 non-DST, 02:30:00 местного времени соответствует как 00:30:00 UTC, так и 01:30:00 UTC. В такой ситуации параметр ambiguous определяет, как следует обрабатывать неоднозначные моменты времени.
‘infer’ попытается определить часы перехода на зимнее время по порядку
bool-ndarray, где True указывает на время DST, False — на время без DST (обратите внимание, что этот флаг применим только для неоднозначных моментов времени)
‘NaT’ вернёт NaT при наличии неоднозначных моментов времени
‘raise’ вызовет AmbiguousTimeError, если имеются неоднозначные моменты времени.
- nonexistent:строка, по умолчанию 'raise'
-
Несуществующее время не существует в определённой временной зоне при переходе на летнее время. Допустимые значения:
‘shift_forward’ переместит несуществующее время вперёд к ближайшему существующему времени
‘shift_backward’ переместит несуществующее время назад к ближайшему существующему времени
‘NaT’ вернёт NaT при наличии несуществующих моментов времени
объекты timedelta сместят несуществующие моменты времени на timedelta
‘raise’ вызовет NonExistentTimeError, если имеются несуществующие моменты времени.
- Возвращаемое значение:
-
- Series/DataFrame
-
Тип такой же, как у входных данных.
- Возбуждаемые исключения:
-
- TypeError
-
Если TimeSeries имеет временную зону и 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 для преобразования в индекс без временной зоны и сохранения местного времени:
>>> 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
Обратите внимание на переходы на летнее/зимнее время. При последовательных данных 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В некоторых случаях определение DST невозможно. В таких случаях можно передать ndarray в параметр ambiguous, чтобы явно указать время 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Если переход на летнее/зимнее время приводит к несуществующим моментам времени, можно сдвинуть эти даты вперёд или назад с помощью объекта 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
© 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.DataFrame.tz_localize.html