Pandas时间序列:时期(period)及其算术运算详解


Posted in Python onFebruary 25, 2020

import pandas as pd
import numpy as np

一、时间类型及其在python中对应的类型

时间戳?timestamp

时间间隔?timedelta

时期?period

二、时期

时期表示的是时间区间,比如数日、数月、数季、数年等

1.定义一个Period

p = pd.Period(2007,freq='A-DEC') #表示以12月作为结束的一整年,这里表示从2007-01-01到2017-12-31的全年
p

Period('2007', 'A-DEC')

2.通过加减整数可以实现对Period的移动

p+5

Period('2012', 'A-DEC')

p-2

Period('2005', 'A-DEC')

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

pd.Period('2014',freq='A-DEC') - p

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

rng = pd.period_range('1/1/2000','6/30/2000',freq='M') #创建从2001-01-01到2000-06-30所有月份的Period
pd.Series(np.random.randn(6),index=rng)

2000-01 -1.125053
2000-02 1.035250
2000-03 -0.796830
2000-04 0.381285
2000-05 0.533522
2000-06 -2.733462
Freq: M, dtype: float64

5.PeriodIndex类的构造函数允许直接使用一组字符串表示一段时期

values = ['2001Q3','2002Q2','2003Q1']
index = pd.PeriodIndex(values,freq='Q-DEC')
index

PeriodIndex(['2001Q3', '2002Q2', '2003Q1'], dtype='period[Q-DEC]', freq='Q-DEC')

三、时期的频率转换-asfreq

1.通过asfreq可以将频率转换

p = pd.Period('2007',freq='A-DEC') # 2007年1月1日到2007年12月31日

p.asfreq('M',how='start') # 将评率为年(20070101-20071231)转换频率为月201701

Period('2007-01', 'M')

p.asfreq('M',how='end') # 将评率为年(20070101-20071231)转换频率为月201712

Period('2007-12', 'M')

2.不同频率经过asfreq转换后的结果不同

p = pd.Period('2007',freq='A-JUN') # 2006年7月1日到2007年6月30日

p.asfreq('D','start')

Period('2006-07-01', 'D')

p.asfreq('D','end')

Period('2007-06-30', 'D')

3.从高频率转换为低频率时,超时期(较大的时期)是由子时期(较小的时期)的位置绝对的

p = pd.Period('2007-08','M')

p.asfreq('A-JUN') # 200708对于频率A-JUN是属于2008年度的

Period('2008', 'A-JUN')

4.对于PeriodIndex或TimeSeries的频率转换方式相同

rng = pd.period_range('2006','2009',freq='A-DEC')

ts = pd.Series(np.random.randn(len(rng)),index=rng)
ts

2006 -1.202858
2007 -1.132553
2008 0.902564
2009 0.800859
Freq: A-DEC, dtype: float64

ts.asfreq('M',how='start')

2006-01 -1.202858
2007-01 -1.132553
2008-01 0.902564
2009-01 0.800859
Freq: M, dtype: float64

ts.asfreq('B',how='end')

2006-12-29 -1.202858
2007-12-31 -1.132553
2008-12-31 0.902564
2009-12-31 0.800859
Freq: B, dtype: float64

四、按季度计算的时期频率

许多季度型数据会涉及“财年末”的概念,通常是一年12个月中某月的最后一个工作日或日历日。因此,时间“2012Q4”根据财年末的不同会有不同的含义。pandas支持12种可能的季度型频率,即Q-JAN到Q-DEC。

1.财政年度和季度

p = pd.Period('2012Q4',freq='Q-JAN') # Q-JAN是指1月末的工作日是财政年末
p

Period('2012Q4', 'Q-JAN')

p.asfreq('D','start')

Period('2011-11-01', 'D')

p.asfreq('D','end')

Period('2012-01-31', 'D')

2.该季度倒数第二个工作日的下午4点

p4pm = (p.asfreq('B','e')-1).asfreq('T','s')+16*60
p4pm.to_timestamp()

Timestamp('2012-01-30 16:00:00')

3.相同的运算可以应用到TimeSeries

rng = pd.period_range('2011Q3','2012Q4',freq='Q-JAN')
ts = pd.Series(np.arange(len(rng)),index=rng)
ts
2011Q3 0
2011Q4 1
2012Q1 2
2012Q2 3
2012Q3 4
2012Q4 5
Freq: Q-JAN, dtype: int32
new_rng = (rng.asfreq('B','e')-1).asfreq('T','s')+16*60
ts.index = new_rng.to_timestamp()
ts
2010-10-28 16:00:00 0
2011-01-28 16:00:00 1
2011-04-28 16:00:00 2
2011-07-28 16:00:00 3
2011-10-28 16:00:00 4
2012-01-30 16:00:00 5
dtype: int32

五、Timestamp与Period互相转换

1.通过to_period方法,可以将时间戳(timestamp)索引的Series和DataFrame对象转换为以时期(period)索引

rng = pd.date_range('1/1/2000',periods=3,freq='M')
ts = pd.Series(np.random.randn(3),index=rng)
ts
2000-01-31 -0.501502
2000-02-29 -1.299610
2000-03-31 -0.705091
Freq: M, dtype: float64

pts = ts.to_period()
pts

2000-01 -0.501502
2000-02 -1.299610
2000-03 -0.705091
Freq: M, dtype: float64

2.将timestamp转换为period是运行重复的

rng = pd.date_range('1/29/2000',periods=6,freq='D')
ts2 = pd.Series(np.random.randn(6),index=rng)
ts2.to_period('M')
2000-01 1.368367
2000-01 -0.256934
2000-01 0.417902
2000-02 -1.065910
2000-02 -1.694405
2000-02 0.665471
Freq: M, dtype: float64

3.to_timestamp可以将period转换为timestamp

pts.to_timestamp(how='end')

2000-01-31 -0.501502
2000-02-29 -1.299610
2000-03-31 -0.705091
Freq: M, dtype: float64

六、通过数组创建PeriodIndex

某些数据集中时间信息是分开在多个列存放的,可以通过PeriodIndex的参数将这些列组合在一起

year = [2017,2017,2017,2017,2018,2018,2018,2018]
quarter = [1,2,3,4,1,2,3,4]
index = pd.PeriodIndex(year=year,quarter=quarter,freq='Q-DEC')
index
PeriodIndex(['2017Q1', '2017Q2', '2017Q3', '2017Q4', '2018Q1', '2018Q2',
    '2018Q3', '2018Q4'],
   dtype='period[Q-DEC]', freq='Q-DEC')

以上这篇Pandas时间序列:时期(period)及其算术运算详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python迭代器的使用方法实例
Nov 21 Python
python搜索指定目录的方法
Apr 29 Python
python简单文本处理的方法
Jul 10 Python
python中类和实例如何绑定属性与方法示例详解
Aug 18 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
Jan 04 Python
python3如何将docx转换成pdf文件
Mar 23 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
Python八皇后问题解答过程详解
Jul 29 Python
使用Matplotlib 绘制精美的数学图形例子
Dec 13 Python
Python实现自动整理文件的脚本
Dec 17 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
基于pygame实现童年掌机打砖块游戏
Feb 25 #Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
Feb 25 #Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 #Python
Python对wav文件的重采样实例
Feb 25 #Python
python实现打砖块游戏
Feb 25 #Python
Python实现企业微信机器人每天定时发消息实例
Feb 25 #Python
Django 设置多环境配置文件载入问题
Feb 25 #Python
You might like
php的curl实现get和post的代码
2008/08/23 PHP
使用PHP获取汉字的拼音(全部与首字母)
2013/06/27 PHP
PHPThumb图片处理实例
2014/05/03 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
2014/07/19 PHP
微信随机生成红包金额算法php版
2016/07/21 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
excel操作之Add Data to a Spreadsheet Cell
2007/06/12 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
一个简单的全屏图片上下打开显示网页效果示例
2014/07/08 Javascript
超简单的Vue.js环境搭建教程
2017/03/17 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
JS+canvas动态绘制饼图的方法示例
2017/09/12 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
vue头部导航动态点击处理方法
2018/11/02 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
javascript防抖函数debounce详解
2019/06/11 Javascript
python中列表的切片与修改知识点总结
2019/07/23 Python
python写程序统计词频的方法
2019/07/29 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
python将字典列表导出为Excel文件的方法
2019/09/02 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
2020/01/08 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
Python实现EM算法实例代码
2020/10/04 Python
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
音乐学个人的自荐书范文
2013/11/26 职场文书
工作保证书范文
2014/04/29 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
授权委托书公证
2014/09/14 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
Python下opencv库的安装过程及问题汇总
2021/06/11 Python
Mysql实现简易版搜索引擎的示例代码
2021/08/30 MySQL