當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python pandas.Series.dt.tz_localize用法及代碼示例


用法:

Series.dt.tz_localize(*args, **kwargs)

將 tz-naive 日期時間數組/索引本地化為 tz-aware 日期時間數組/索引。

此方法采用時區 (tz) 天真 Datetime Array/Index 對象,並使該時區感知。它不會將時間移動到另一個時區。

這個方法也可以用來做相反的事情——從一個感知對象創建一個時區不感知對象。為此,請傳遞 tz=None

參數

tzstr、pytz.timezone、dateutil.tz.tzfile 或無

將時間戳轉換為的時區。傳遞None 將刪除保留本地時間的時區信息。

ambiguous‘infer’, ‘NaT’, 布爾數組,默認 ‘raise’

當時鍾由於 DST 向後移動時,可能會出現不明確的時間。例如,在歐洲中部時間 (UTC+01) 中,當從 03:00 DST 到 02:00 非 DST 時,當地時間 02:30:00 發生在 00:30:00 UTC 和 01:30:00世界標準時間。在這種情況下,ambiguous 參數指示應如何處理模棱兩可的時間。

  • ‘infer’ 將嘗試根據訂單推斷秋季 dst-transition 小時

  • bool-ndarray 其中 True 表示 DST 時間,False 表示非 DST 時間(請注意,此標誌僅適用於模棱兩可的時間)

  • 'NaT' 將在時間不明確的地方返回 NaT

  • 如果時間不明確,‘raise’ 將引發 AmbiguousTimeError。

nonexistent‘shift_forward’, ‘shift_backward, ‘NaT’, timedelta, 默認 ‘raise’

由於 DST,時鍾向前移動的特定時區不存在不存在的時間。

  • ‘shift_forward’ 將不存在的時間向前移動到最接近的存在時間

  • ‘shift_backward’ 將不存在的時間向後移動到最接近的存在時間

  • ‘NaT’ 將返回不存在時間的 NaT

  • timedelta 對象會將不存在的時間移動 timedelta

  • 如果時間不存在,‘raise’ 將引發 NonExistentTimeError。

返回

與自己相同的類型

數組/索引轉換為指定時區。

拋出

TypeError

如果日期時間數組/索引是 tz-aware 並且 tz 不是無。

例子

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

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

小心 DST 更改。當有順序數據時,pandas 可以推斷 DST 時間:

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

在某些情況下,推斷 DST 是不可能的。在這種情況下,您可以將 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]

如果 DST 轉換導致時間不存在,您可以使用 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]

相關用法


注:本文由純淨天空篩選整理自pandas.pydata.org大神的英文原創作品 pandas.Series.dt.tz_localize。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。