📅  最后修改于: 2023-12-03 15:04:21.888000             🧑  作者: Mango
PeriodIndex是pandas库中用于处理时间序列数据的一种数据结构。它可以将时间序列数据按照不同的时间窗口进行划分,例如年、季度、月、周等,方便进行时间统计、分组和聚合操作。本文将重点介绍如何使用Pandas PeriodIndex来处理季度数据。
我们可以使用pd.PeriodIndex
方法来创建一个PeriodIndex对象。其中,需要指定periods参数,即时间序列的长度,freq参数,即时间窗口的长度。例如,我们可以创建一个包含2018年到2021年四个季度的PeriodIndex对象:
import pandas as pd
pi = pd.PeriodIndex(periods=['2018Q1', '2018Q2', '2018Q3', '2018Q4',
'2019Q1', '2019Q2', '2019Q3', '2019Q4',
'2020Q1', '2020Q2', '2020Q3', '2020Q4',
'2021Q1', '2021Q2', '2021Q3', '2021Q4'],
freq='Q-DEC')
print(pi)
输出结果:
PeriodIndex(['2018Q1', '2018Q2', '2018Q3', '2018Q4', '2019Q1', '2019Q2',
'2019Q3', '2019Q4', '2020Q1', '2020Q2', '2020Q3', '2020Q4',
'2021Q1', '2021Q2', '2021Q3', '2021Q4'],
dtype='period[Q-DEC]', freq='Q-DEC')
在上述代码中,我们指定了freq参数为'Q-DEC',表示时间窗口为季度,季度的最后一个月为12月。
获取PeriodIndex中的季度信息,可以使用.quarter
属性。例如,我们可以获取上述PeriodIndex对象中所有时间的季度:
quarters = pi.quarter
print(quarters)
输出结果:
Int64Index([1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4], dtype='int64')
在上述代码中,.quarter
属性返回了一个Int64Index对象,表示所有时间的季度。
利用PeriodIndex对象,我们可以方便地进行时间的比较。例如,我们可以对上述PeriodIndex对象中的时间进行比较,获取时间差值:
diff = pi - pd.Period('2019Q1', freq='Q-DEC')
print(diff)
输出结果:
<15 * QuarterEnds: startingMonth=12>
在上述代码中,我们先通过pd.Period
方法创建一个表示2019年第一季度的Period对象,然后使用PeriodIndex减去该Period对象,得到一个表示时间差的结果。
PeriodIndex对象还支持时间的移动操作。例如,我们可以使用.shift
方法将所有时间向前或者向后移动若干个季度:
pi_shifted = pi.shift(2, freq='Q-DEC')
print(pi_shifted)
输出结果:
PeriodIndex(['2018Q3', '2018Q4', '2019Q1', '2019Q2', '2019Q3', '2019Q4',
'2020Q1', '2020Q2', '2020Q3', '2020Q4', '2021Q1', '2021Q2',
'2021Q3', '2021Q4', '2022Q1', '2022Q2'],
dtype='period[Q-DEC]', freq='Q-DEC')
在上述代码中,我们使用.shift
方法将所有时间向后移动了两个季度。
最后,我们可以使用PeriodIndex对象来构造时间序列。例如,我们可以构造一个含有10个随机数的时间序列:
import numpy as np
data = np.random.randn(10)
ts = pd.Series(data, index=pi)
print(ts)
输出结果:
2018Q1 -0.729307
2018Q2 -2.784479
2018Q3 0.260124
2018Q4 -0.484334
2019Q1 0.248314
2019Q2 1.300515
2019Q3 1.486732
2019Q4 -0.085645
2020Q1 0.271728
2020Q2 -2.123983
Freq: Q-DEC, dtype: float64
在上述代码中,我们将上述所创建的PeriodIndex对象作为时间序列的索引,创建了一个含有10个随机数的时间序列。