pandas.DatetimeIndex.tz_localize # 日期时间索引。tz_localize ( tz ,歧义= 'raise' ,不存在= 'raise' ) [来源] # 将 tz-naive 日期时间数组/索引本地化为 tz-aware 日期时间数组/索引。 此方法采用时区 (tz) 原生日期时间数组/索引对象并使该时区感知。它不会将时间移动到另一个时区。 此方法也可用于执行相反的操作 - 从感知对象创建时区不感知对象。为此,请传递tz=None。 参数: tz str、pytz.timezone、dateutil.tz.tzfile、datetime.tzinfo 或 None将时间戳转换为的时区。通过None将删除保留当地时间的时区信息。 不明确的“infer”、“NaT”、布尔数组、默认“raise”当时钟因夏令时而向后移动时,可能会出现不明确的时间。例如,在中欧时间 (UTC+01) 中,当从 03:00 DST 到 02:00 非 DST 时,当地时间 02:30:00 会出现在 00:30:00 UTC 和 01:30:00世界标准时间。在这种情况下, 不明确的参数指示应如何处理不明确的时间。 “infer”将尝试根据订单推断秋季夏令时转换时间 bool-ndarray 其中 True 表示 DST 时间,False 表示非 DST 时间(请注意,此标志仅适用于不明确的时间) 'NaT' 将在存在不明确时间的情况下返回 NaT 如果存在不明确的时间,“raise”将引发 AmbigouslyTimeError。 不存在'shift_forward'、'shift_backward、'NaT'、timedelta、默认 'raise'不存在的时间不存在于因夏令时而时钟向前移动的特定时区中。 'shift_forward' 会将不存在的时间向前移动到最接近的现有时间 'shift_backward' 会将不存在的时间向后移动到最接近的现有时间 'NaT' 将在不存在的时间处返回 NaT timedelta 对象将按 timedelta 移动不存在的时间 如果时间不存在,“raise”将引发 NonExistentTimeError。 返回: 与自身类型相同数组/索引转换为指定时区。 加薪: 类型错误如果日期时间数组/索引是 tz 感知的并且 tz 不是 None。 也可以看看 DatetimeIndex.tz_convert将 tz 感知的 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 本地化为美国/东部时区: >>> 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] 在某些情况下,推断夏令时是不可能的。在这种情况下,您可以将 ndarray 传递给不明确的参数以显式设置 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]