Python Pandas – 检查BusinessDay偏移量是否已归一化

Python Pandas – 检查BusinessDay偏移量是否已归一化

Pandas 是 Python 的一个开源数据分析库,提供了高性能、易用性以及数据清洗、聚合、分析等操作的能力。Pandas 中的 BusinessDay 偏移量中文名为“工作日”,常用于一些需要排除周末或者特定日期的操作。

在使用 BusinessDay 偏移量的时候有一个问题需要特别注意,就是它是否已经归一化了。什么是归一化呢?如果一个 BusinessDay 偏移量的结果是 3 个工作日,而第一个日期为周五,那么结果应该是下一个周四,而不是下一个周一。

本文就要教大家如何检查 BusinessDay 偏移量是否已经归一化。

更多Pandas相关文章,请阅读:Pandas 教程

检查方法

我们可以通过生成一个 DatetimeIndex 的方式来检查 BusinessDay 偏移量是否已经归一化。具体代码如下:

import pandas as pd

rng = pd.date_range('2022-09-01', '2022-09-07', freq='B')
print(rng)

上面的代码中我们生成了一个 2022 年 9 月 1 日至 2022 年 9 月 7 日之间的 DatetimeIndex,这里的 freq 参数为 ‘B’,表示使用 BusinessDay 偏移量,这个偏移量会将周末排除掉。

执行上面的代码会得到 5 个日期:

DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-05', '2022-09-06','2022-09-07'],dtype='datetime64[ns]', freq='B')

可以看到,这个列表中排除了周六和周日,只留下了 5 个日期。如果我们想要检查这个 BusinessDay 偏移量是否已经归一化,只需要将这个列表中的日期一个一个用字符串的形式指定,然后重新生成一个 DatetimeIndex,看看它们的结果是否都是归一化的即可。具体代码如下:

rng = pd.date_range('2022-09-01', '2022-09-07', freq='B')
for date in rng:
    date_str = date.strftime('%Y-%m-%d')
    new_rng = pd.date_range(date_str, periods=3, freq='B')
    print(new_rng)

上述代码中,我们使用了一个 for 循环,将列表中的日期一个一个用字符串的形式指定。然后,对于每个日期,我们重新生成了一个 DatetimeIndex,这个 DatetimeIndex 包含了从这个日期开始的 3 个 BusinessDay 偏移量的值,如果这个偏移量已经归一化,那么每个新的 DatetimeIndex 中第一个日期都应该是下一个工作日的日期。例如,2022-09-05 这个日期应该对应的是 2022-09-07 这个日期,而不是 2022-09-06 这个日期。

执行上述代码,会得到如下的输出:

DatetimeIndex(['2022-09-01', '2022-09-02', '2022-09-05'], dtype='datetime64[ns]', freq='B')
DatetimeIndex(['2022-09-06', '2022-09-07', '2022-09-08'], dtype='datetime64[ns]', freq='B')
DatetimeIndex(['2022-09-07', '2022-09-08', '2022-09-09'], dtype='datetime64[ns]', freq='B')
DatetimeIndex(['2022-09-08', '2022-09-09', '2022-09-12'], dtype='datetime64[ns]', freq='B')
DatetimeIndex(['2022-09-09', '2022-09-12', '2022-09-13'], dtype='datetime64[ns]', freq='B')

可以看到,每个新生成的 DatetimeIndex中的第一个日期都是正确的,符合归一化的要求,说明这个 BusinessDay 偏移量已经归一化了。

此外,如果不想一个一个日期去检查 BusinessDay 偏移量是否已经归一化,我们还可以通过一个工具函数 to_offset() 来实现。具体操作如下:

from pandas.tseries.offsets import BDay

bd = BDay()
print(bd.to_offset().is_normalized())

上述代码中,我们创建了一个 BusinessDay 偏移量对象 bd,并将它转换为 Offset 对象,并调用 is_normalized() 方法来检查它是否已经归一化。如果返回值为 True,说明这个偏移量已经归一化了。如果返回值为 False,则说明这个 BusinessDay 偏移量未归一化。

结论

在使用 BusinessDay 偏移量时,需要注意它是否已经归一化。我们可以通过生成 DatetimeIndex 和工具函数 to_offset() 来检查 BusinessDay 偏移量是否已经归一化。如果未归一化,可能会导致一些错误的结果。因此,在使用 BusinessDay 偏移量时,一定要注意归一化的问题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

Pandas 教程