运算规则python_时间序列:python时期及其算术运算前篇

时期(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

「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个关注哦!感谢!」

「文中代码均亲测过,若有错误之处,欢迎批评指正,一起学习,一起成长!」

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值