Pandas时间序列:时期(period)及其算术运算详解

  • Post category:Python

Pandas时间序列:时期(period)及其算术运算详解

在 Pandas 中,时期(period)表示时间区间,以固定的频率出现。 时期以一定的频率跨度(step)对时间轴垂直分区,并通过 API 支持一些方便的算术运算。

时间区间的创建

可以使用 period 函数生成一个 Period 对象。

import pandas as pd

period = pd.Period('2022-06', freq='M')
print(period)

执行上述代码会输出该时期的开端和结尾时间(注意这里freq='M'表示频率为月份)。输出如下:

2022-06

也可以使用pd.period_range函数生成一组时期:

periods = pd.period_range('2022-03', '2022-05', freq='M')
print(periods)

执行上述代码将输出一个时期的范围:

PeriodIndex(['2022-03', '2022-04', '2022-05'], dtype='period[M]', freq='M')

时间减法

如果有两个时期,我们可以用减法计算它们之间的时间跨度。

period1 = pd.Period('2022-06', freq='M')
period2 = pd.Period('2021-05', freq='M')
print(period1 - period2)

输出:

13

这里是两个 Period 对象相减得到 13,它们之间相差 13 个月。

时期的算术运算

Period 对象支持一些算术运算,例如加法和减法。通过这些运算,我们可以很方便地调整时期,例如将某个时期平移若干个频率单位,或获取某一个时期所在的时间块。

period1 = pd.Period('2022-03', freq='M')
period2 = pd.Period('2022-06', freq='M')

# 加法
print(period1 + 2)

# 减法
print(period2 - 3)

这里 period1 + 2 得到 2022-05,因为 2 个周期等于 2 个月,所以距离 2022-03 两个月的时期是 2022-05。同理,period2 - 3 得到 2022-03

示例

例子1:求两组时期的交集

period1 = pd.period_range('2022-01', '2022-05', freq='M')
period2 = pd.period_range('2022-03', '2022-07', freq='M')

intersect = period1.intersection(period2)
print(intersect)

上述代码输出:

PeriodIndex(['2022-03', '2022-04', '2022-05'], dtype='period[M]', freq='M')

说明两个时期之间的交集是 2022-032022-042022-05

例子2:查找某个时期所处的季度

period = pd.Period('2022Q2', freq='Q')
print(period.quarter)

上述代码输出2,说明该时期处于第二季度。

总结

本文介绍了在 Pandas 中如何创建时间区间,以及如何进行一些常用的时期运算,例如加减法、求交集等,以及如何查找某个时期所在的季度等操作。