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)及其算术运算详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

pandas 季度_Pandas时间序列:时期(period)及其算术运算详解相关推荐

  1. [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  2. python iloc用法_pandas.DataFrame.loc和.iloc用法详解

    .loc[ ]与.iloc[ ]用法详解 目录 pandas.DataFrame.loc    pandas.DataFrame.iloc 注意 通过.loc[ ]或者.iloc[ ]获取数据时需要注 ...

  3. pandas 季度_pandas_时间序列和常用操作

    #时间序列和常用操作 importpandas as pd#每隔五天--5D pd.date_range(start = '20200101',end = '20200131',freq = '5D' ...

  4. python算术运算_Python 的二元算术运算详解

    相关学习推荐:python教程 大家对我解读属性访问的博客文章反应热烈,这启发了我再写一篇关于 Python 有多少语法实际上只是语法糖的文章.在本文中,我想谈谈二元算术运算. 具体来说,我想解读减法 ...

  5. pandas系列 read_csv 与 to_csv 方法各参数详解(全,中文版)

    * 由于在做数据处理,数据分析的时候,免不了读取数据或者将数据转换为相应的处理形式,那么,pandas的read_csv和to_csv,就能给我们很大的帮助,接下来,博主,将 read_csv 和 t ...

  6. pandas read_excel 和 to_excel 读写Excel的参数详解

    Python 读写 Excel 可以使用 Pandas,处理很方便.但如果要处理 Excel 的格式,还是需要 openpyxl 模块,旧的 xlrd 和 xlwt 模块可能支持不够丰富.Pandas ...

  7. python二元操作符是什么_Python 的二元算术运算详解

    大家对我解读属性访问的博客文章反应热烈,这启发了我再写一篇关于 Python 有多少语法实际上只是语法糖的文章.在本文中,我想谈谈二元算术运算. 具体来说,我想解读减法的工作原理:a - b.我故意选 ...

  8. 【Pandas总结】第二节 Pandas 的数据读取_pd.read_csv()的使用详解(非常全面,推荐收藏)

    使用pandas进行数据读取,最常读取的数据格式如下: NO 数据类型 说明 使用方法 1 csv, tsv, txt 可以读取纯文本文件 pd.read_csv 2 excel 可以读取.xls . ...

  9. pandas中loc和iloc函数的用法详解

    无论是loc还是iloc都是pandas中数据筛选的函数. 我们先聊一下loc函数,loc的全程是location,什么东西可以作为location?我们第一时间可能会想到标签. 在pandas读取文 ...

最新文章

  1. 无监督学习之RBM和AutoEncoder
  2. 解释afterPropertiesSet
  3. php-fpm 无法运行cli,linux-怎样让php在cli与fpm环境下运行时加载不同的扩展?
  4. Java 进程间文件锁FileLock详解
  5. 项目经理有必要学python吗_项目经理到底要不要懂技术
  6. centos7.9使用jenkins部署springcloud微服务_配合SVN_脚本_实现自动部署后端以及前端程序_亲测成功---持续集成部署Jenkins工作笔记0023
  7. 2018走向成熟 2019未来可期 | PaddlePaddle大有可为
  8. JavaScript数据结构——图(Graph)
  9. Epoll 的time_out参数引发的cpu占用问题
  10. HSPA+系列之“下行增强F-DPCH +下行增强CELL_FACH
  11. 神坛上的插画师真的高薪且自由吗?
  12. OC渲染器渐变怎么用?
  13. 用PHP查看微信撤回的消息,vbot微信聊天机器人微信聊天消息详解(9):撤回消息和防撤回消息...
  14. 机器人——人类工作和生活的助手(科普)
  15. 常见混沌系统—Chen模型
  16. ARM汇编之kile环境
  17. TIM新版支持微信扫码登录:自动生成新QQ
  18. easyexcel 字体加粗
  19. gateway的基本使用
  20. Linux搭建MQTT服务器(mosquitto)并使用

热门文章

  1. 新加坡国旗的绘制(完整版)
  2. 在你计算机上没有配置打印机,安装打印机后,计算机中没有打印机.
  3. 最新版SpringBoot结合ProGuard实现代码混淆
  4. web前端——html介绍和head标签
  5. Oculus申请柱形曲面显示器专利,可提供更宽视场
  6. 游戏系统开发笔记(九)——构建战斗系统
  7. QQ如何获得高属性宠物(转)
  8. 浪潮:2022年净利同比增长51.39%
  9. Bootstrap3简单好用,轻松实现手机适配
  10. 什么是软件安全性测试?