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-03
、2022-04
、2022-05
。
例子2:查找某个时期所处的季度
period = pd.Period('2022Q2', freq='Q')
print(period.quarter)
上述代码输出2
,说明该时期处于第二季度。
总结
本文介绍了在 Pandas 中如何创建时间区间,以及如何进行一些常用的时期运算,例如加减法、求交集等,以及如何查找某个时期所在的季度等操作。