pandas.DataFrame.tz_localize#
- DataFrame.tz_localize(tz, axis=0, level=None, copy=True, ambiguous='raise', nonexistent='raise')[源代码]#
将Series或DataFrame的Tz-naive索引本地化到目标时区。
此操作将本地化索引。要本地化时区原始系列中的值,请使用
Series.dt.tz_localize()
。- 参数
- tzStr或tzinfo
- axis要本地化的轴
- levelInt、str、默认为无
如果轴是多索引,则本地化特定级别。否则必须为None。
- copy布尔值,默认为True
还要制作底层数据的副本。
- ambiguous‘iner’,bool-ndarray,‘nat’,默认‘raise’
当时钟因DST向后移动时,可能会出现时间不明确的情况。例如,在中欧时间(UTC+01),当从DST 03:00到非DST 02:00时,当地时间02:30:00同时出现在UTC 00:30:00和01:30:00 UTC。在这种情况下, ambiguous 参数指示应如何处理不明确的时间。
INFER将尝试根据订单推断秋季DST过渡时间
Bool-ndarray其中True表示DST时间,False表示非DST时间(请注意,此标志仅适用于不明确的时间)
“NaT”将在时间不明确的地方返回NAT
如果存在不明确的时间,‘Raise’将引发AmbiguousTimeError。
- nonexistent字符串,默认‘RAISE’
在时钟由于DST而向前移动的特定时区中不存在不存在的时间。有效值包括:
‘Shift_Forward’会将不存在的时间向前移动到最接近的现有时间
‘Shift_Backup’会将不存在的时间向后移动到最接近的现有时间
“NaT”将返回不存在时间的NAT
时间增量对象将按时间增量移动不存在的时间
如果存在不存在的时间,“Raise”将引发非ExistentTimeError。
- 退货
- 系列或DataFrame
与输入类型相同。
- 加薪
- TypeError
如果TimeSeries是TZ感知的,而TZ不是没有的。
示例
本地化本地时间:
>>> 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
DST更改时要小心。当有顺序数据时,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传递给歧义参数以显式设置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
如果DST转换导致时间不存在,则可以使用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