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]