时期(Period)表示对是时间区间,比如数日、数月、数季、数年等。Period类所表示的就是这种数据类型,其构造函数需要用到一个字符串或证书,以及表的频率;
In [144]: p=pd.Period(2007,freq='A-DEC')
In [145]: p
Out[145]: Period('2007', 'A-DEC')
In [146]: p+5
Out[146]: Period('2012', 'A-DEC')
In [147]: p-2
Out[147]: Period('2005', 'A-DEC')
In [148]: pd.Period('2014',freq='A-DEC')-p
Out[148]: <7 * YearEnds: month=12>
1.period_range函数
用于创建规则的时期范围:
In [150]: rng=pd.period_range('1/1/2019','6/30/2019',freq='M')
In [151]: rng
Out[151]: PeriodIndex(['2019-01', '2019-02', '2019-03', '2019-04', '2019-05', '2019-06'], dtype='period[M]', freq='M')
2.PeriodIndex类
可以在任何pandas数据结构总被用作轴索引:
In [152]: Series(np.random.randn(6),index=rng)
Out[152]:
2019-01 0.970851
2019-02 -0.110392
2019-03 -1.347724
2019-04 -1.819023
2019-05 -1.502872
2019-06 -1.408085
Freq: M, dtype: float64
In [153]: values=['2001Q3','2002Q2','2003Q1']
In [154]: index=pd.PeriodIndex(values,freq='Q-DEC')
In [155]: index
Out[155]: PeriodIndex(['2001Q3', '2002Q2', '2003Q1'], dtype='period[Q-DEC]', freq='Q-DEC')
时期的频率转换
Period和PeriodIndex对象都可以通过其asfreq方法被转换成别的频率。
In [156]: p=pd.Period('2007',freq='A-DEC')
In [157]: p
Out[157]: Period('2007', 'A-DEC')
In [158]: p.asfreq('M',how='start')
Out[158]: Period('2007-01', 'M')
In [159]: p.asfreq('M',how='end')
Out[159]: Period('2007-12', 'M')
可以将Period(‘2007’,’A-DEC’)看做一个被划分为多个月度时期的时间段中的游标。
In [160]: p=pd.Period('2007',freq='A-JUN')
In [161]: p
Out[161]: Period('2007', 'A-JUN')
In [162]: p.asfreq('M','start')
Out[162]: Period('2006-07', 'M')
In [163]: p.asfreq('M','end')
Out[163]: Period('2007-06', 'M')
将高频率转换为低频率时,超时期是由子时期所属的位置决定的。
In [165]: p=pd.Period('2007-08','M')
In [166]: p
Out[166]: Period('2007-08', 'M')
In [167]: p.asfreq('A-JUN')
Out[167]: Period('2008', 'A-JUN')
PeriodIndex或TimeSeries的频率转换方式也是如此:
In [168]: rng=pd.period_range('2006','2009',freq='A-DEC')
In [169]: rng
Out[169]: PeriodIndex(['2006', '2007', '2008', '2009'], dtype='period[A-DEC]', freq='A-DEC')
In [170]: ts=Series(np.random.randn(len(rng)),index=rng)
In [171]: ts
Out[171]:
2006 -1.874736
2007 -1.442999
2008 0.880236
2009 0.105794
Freq: A-DEC, dtype: float64
In [172]: ts.asfreq('M',how='start')
Out[172]:
2006-01 -1.874736
2007-01 -1.442999
2008-01 0.880236
2009-01 0.105794
Freq: M, dtype: float64
In [173]: ts.asfreq('B',how='end')
Out[173]:
2006-12-29 -1.874736
2007-12-31 -1.442999
2008-12-31 0.880236
2009-12-31 0.105794
Freq: B, dtype: float64
「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个关注哦!感谢!」
「文中代码均亲测过,若有错误之处,欢迎批评指正,一起学习,一起成长!」