Python pandas.DataFrame.tz_localize函数方法的使用

Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.DataFrame.tz_localize方法的使用。

DataFrame.tz_localize(tz, axis=0, level=None, copy=True, ambiguous='raise', nonexistent='raise') [source]

将Series或DataFrame的Localize tz-naive索引到目标时区。

此操作将对索引进行本地化。使用Series.dt.tz_localize()将时间区域Series中的值本地化。

参数

tz :strtzinfo

移动的周期数,可以是正的,也可以是负的。

axis :要 localize的轴

level :int, str, 默认为None

如果axis是多索引,则转换特定级别。否则,一定为None

copy :bool, 默认为 True

是否要复制基础数据。

ambiguous :‘infer’, bool-ndarray, ‘NaT’

默认为 ‘raise’

当时钟由于DST而向后移动时,可能会产生不明确的时间。

例如,在中欧时间(UTC + 01)中,

从夏令时03:00到非夏令时02:00时,

本地时间02:30:00

发生在世界标准时间00:30:00

01:30:00世界标准时间。

在这种情况下, 歧义参数指示应该如何处理歧义时间。

‘infer’将尝试根据订单推断秋季dst转换时间

bool-ndarray,其中True表示DST时间,

False表示非DST时间

(请注意,此标志仅适用于不明确的时间)

●如果时间不明确,“NaT”将返回NaT

●如果存在不明确的时间,“raise”将引发AmbiguousTimeError

nonexistent :str,默认为“raise”

在特定时区中不存在不存在的时间,

在该特定时区中时钟由于DST而向前移动。有效值为:

'shift_forward'将不存在的时间向前移动到最接近的现有时间

'shift_backward'将不存在的时间向后移动到最接近的现有时间

●如果没有时间,“NaT”将返回NaT

timedelta对象会将不存在的时间偏移timedelta

●如果不存在时间,“raise”将引发NonExistentTimeError

0.24.0版中的新功能。


返回值

SeriesDataFrame

与输入类型相同。

Raises

TypeError

如果TimeSeries为tz-aware,而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

请注意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

在某些情况下,无法推断出夏令时。在这种情况下,您可以将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

推荐阅读
cjavapy编程之路首页