美文网首页
python时间序列(2)

python时间序列(2)

作者: 弦好想断 | 来源:发表于2020-05-10 20:00 被阅读0次

时期及其算术运算

时期(period)表示的是时间区间,比如数日、数月、数季、数年等。Period类所 表示的就是这种数据类型,其构造函数需要用到一个字符串或整数,以及表11-4中 的频率:

In [149]: p = pd.Period(2007, freq='A-DEC') 
In [150]: p 
Out[150]: Period('2007', 'A-DEC')

这里,这个Period对象表示的是从2007年1月1日到2007年12月31日之间的整段时间。

只需对Period对象加上或减去一个整数即可达到根据其频率进行位移的效果:

In [151]: p + 5 
Out[151]: Period('2012', 'A-DEC') 
In [152]: p - 2 
Out[152]: Period('2005', 'A-DEC')

如果两个Period对象拥有相同的频率,则它们的差就是它们之间的单位数量:

In [153]: pd.Period('2014', freq='A-DEC') - p 
Out[153]: 7

period_range函数可用于创建规则的时期范围:

In [154]: rng = pd.period_range('2000-01-01', '2000-06-30', freq ='M') 
In [155]: rng 
Out[155]: PeriodIndex(['2000-01', '2000-02', '2000-03', '2000-04 ', '2000-05', '2000-06'], dtype='period[M]', freq='M')

PeriodIndex类保存了一组Period,它可以在任何pandas数据结构中被用作轴索引:

In [156]: pd.Series(np.random.randn(6), index=rng) 
Out[156]: 
2000-01 -0.514551 
2000-02 -0.559782 
2000-03 -0.783408 
2000-04 -1.797685 
2000-05 -0.172670 
2000-06 0.680215 
Freq: M, dtype: float64

如果你有一个字符串数组,你也可以使用PeriodIndex类:

In [157]: values = ['2001Q3', '2002Q2', '2003Q1'] 
In [158]: index = pd.PeriodIndex(values, freq='Q-DEC') 
In [159]: index 
Out[159]: PeriodIndex(['2001Q3', '2002Q2', '2003Q1'], dtype='per iod[Q-DEC]', freq ='Q-DEC')

时期的频率转换

Period和PeriodIndex对象都可以通过其asfreq方法被转换成别的频率。假设我们有 一个年度时期,希望将其转换为当年年初或年末的一个月度时期。该任务非常简 单:

In [160]: p = pd.Period('2007', freq='A-DEC') 
In [161]: p 
Out[161]: Period('2007', 'A-DEC') 
In [162]: p.asfreq('M', how='start') 
Out[162]: Period('2007-01', 'M') 
In [163]: p.asfreq('M', how='end') 
Out[163]: Period('2007-12', 'M')

你可以将Period('2007','A-DEC')看做一个被划分为多个月度时期的时间段中的游 标。图11-1对此进行了说明。
对于一个不以12月结束的财政年度,月度子时期的归属情况就不一样了:

In [164]: p = pd.Period('2007', freq='A-JUN') 
In [165]: p 
Out[165]: Period('2007', 'A-JUN') 
In [166]: p.asfreq('M', 'start') 
Out[166]: Period('2006-07', 'M') 
In [167]: p.asfreq('M', 'end') 
Out[167]: Period('2007-06', 'M')

在将高频率转换为低频率时,超时期(superperiod)是由子时期(subperiod)所 属的位置决定的。例如,在A-JUN频率中,月份“2007年8月”实际上是属于周期“2008年”的:

这地方很关键!慢慢理解

In [168]: p = pd.Period('Aug-2007', 'M') 
In [169]: p.asfreq('A-JUN') 
Out[169]: Period('2008', 'A-JUN')

完整的PeriodIndex或TimeSeries的频率转换方式也是如此:

In [170]: rng = pd.period_range('2006', '2009', freq='A-DEC') 
In [171]: ts = pd.Series(np.random.randn(len(rng)), index=rng) 
In [172]: ts 
Out[172]: 
2006 1.607578 
2007 0.200381 
2008 -0.834068 
2009 -0.302988 
Freq: A-DEC, dtype: float64 
In [173]: ts.asfreq('M', how='start') 
Out[173]: 
2006-01 1.607578 
2007-01 0.200381 
2008-01 -0.834068 
2009-01 -0.302988 
Freq: M, dtype: float64

这里,根据年度时期的第一个月,每年的时期被取代为每月的时期。
如果我们想要 每年的最后一个工作日,我们可以使用“B”频率,并指明想要该时期的末尾:

In [174]: ts.asfreq('B', how='end') 
Out[174]: 
2006-12-29 1.607578 
2007-12-31 0.200381 
2008-12-31 -0.834068 
2009-12-31 -0.302988 
Freq: B, dtype: float64

未完待续。。。

相关文章

  • python时间序列(2)

    时期及其算术运算 时期(period)表示的是时间区间,比如数日、数月、数季、数年等。Period类所 表示的就是...

  • Python数据分析与机器学习44-Python生成时间序列

    一. Python 生成时间序列 时间序列 时间戳(timestamp) 固定周期(period) 时间间隔(in...

  • 时间序列分析2 ARIMA(python)

    1.数据的平稳性 1.1.平稳性: 1.平稳性是要求经由样本时间序列所得到的拟合曲线在未来一段时间内仍能顺着现有的...

  • 时间序列 in python

    1.什么是时间序列数据? 时间序列数据就是一系列数据,这些数据点,每一个都被分配了一个时间戳。 一个简单的例子就是...

  • python -m 命令

    python 2 开启http服务 python3 开启http服务 序列化json

  • 时间序列

    python时间序列分析时间序列完全教程(R)http://blog.csdn.net/Earl211/artic...

  • Python3 列表

    序列是Python中最基本的数据结构。1、Python有6个序列的内置类型,但最常见的是列表和元组。2、序列都可以...

  • Python快速精通2 - 序列,字典代码部分

    Python3基础2:序列(列表,元组)与字典 (一)序列通用方法 序列封包 本质上: 变量 < - - 元组看下...

  • Python玩转金融时间序列之ARCH与GARCH模型

    01 引言 作为金融时间序列的专题推文,【手把手教你】时间序列之日期处理主要介绍了使用Python处理时间序列的日...

  • 字符串

    一、Python 2 和Python 3 最大的区别就是字符串 Python 2 中的字符串是byte的有序序列 ...

网友评论

      本文标题:python时间序列(2)

      本文链接:https://www.haomeiwen.com/subject/dtcsnhtx.html