Pandas中的时间序列一般被认为是不规则的,也就是说,它们没有固定的频率。但是,它常常需要以某种相对固定的频率进行分析,比如每日、每月、每15分钟等(这样自然会在时间序列中引入缺失值)。Pandas有一套标准时间序列频率以及用于重采样、频率推断、生成固定频率日期范围等工具。

例如,可以将之前那个时间序列转换为一个具有固定频率(每日)的时间序列,只需调用resample即可:

生成日期范围

Pandas.date_range可用于生成指定长度的DatetimeIndex:

In [81]: index=pd.date_range('1/11/2019','1/24/2019')

In [82]: index

Out[82]:

DatetimeIndex(['2019-01-11', '2019-01-12', '2019-01-13', '2019-01-14',

'2019-01-15', '2019-01-16', '2019-01-17', '2019-01-18',

'2019-01-19', '2019-01-20', '2019-01-21', '2019-01-22',

'2019-01-23', '2019-01-24'],

dtype='datetime64[ns]', freq='D')

默认情况下,date_range会产生按天计算的时间点。如果只传入起始或结束日期,那就得传入一个表示一段时间的数字:

In [86]: pd.date_range(start='1/11/2019',periods=20)

Out[86]:

DatetimeIndex(['2019-01-11', '2019-01-12', '2019-01-13', '2019-01-14',

'2019-01-15', '2019-01-16', '2019-01-17', '2019-01-18',

'2019-01-19', '2019-01-20', '2019-01-21', '2019-01-22',

'2019-01-23', '2019-01-24', '2019-01-25', '2019-01-26',

'2019-01-27', '2019-01-28', '2019-01-29', '2019-01-30'],

dtype='datetime64[ns]', freq='D')

In [87]: pd.date_range(end='1/11/2019',periods=20)

Out[87]:

DatetimeIndex(['2018-12-23', '2018-12-24', '2018-12-25', '2018-12-26',

'2018-12-27', '2018-12-28', '2018-12-29', '2018-12-30',

'2018-12-31', '2019-01-01', '2019-01-02', '2019-01-03',

'2019-01-04', '2019-01-05', '2019-01-06', '2019-01-07',

'2019-01-08', '2019-01-09', '2019-01-10', '2019-01-11'],

dtype='datetime64[ns]', freq='D')

起始和结束日期定义了日期索引的严格边界。传入“BM”(每月最后一个工作日)频率。

In [89]: pd.date_range('1/1/2019','12/30/2019',freq='BM')

Out[89]:

DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-29', '2019-04-30',

'2019-05-31', '2019-06-28', '2019-07-31', '2019-08-30',

'2019-09-30', '2019-10-31', '2019-11-29'],

dtype='datetime64[ns]', freq='BM')

date_range默认会保留起始和结束时间戳的时间信息(如果有的话):

In [90]: pd.date_range('1/1/2019 12:56:00',periods=20)

Out[90]:

DatetimeIndex(['2019-01-01 12:56:00', '2019-01-02 12:56:00',

'2019-01-03 12:56:00', '2019-01-04 12:56:00',

'2019-01-05 12:56:00', '2019-01-06 12:56:00',

'2019-01-07 12:56:00', '2019-01-08 12:56:00',

'2019-01-09 12:56:00', '2019-01-10 12:56:00',

'2019-01-11 12:56:00', '2019-01-12 12:56:00',

'2019-01-13 12:56:00', '2019-01-14 12:56:00',

'2019-01-15 12:56:00', '2019-01-16 12:56:00',

'2019-01-17 12:56:00', '2019-01-18 12:56:00',

'2019-01-19 12:56:00', '2019-01-20 12:56:00'],

dtype='datetime64[ns]', freq='D')

被规范化(normalize)的午夜时间戳。Normalize选项即可实现该功能:

In [91]: pd.date_range('1/1/2019 12:56:00',periods=20,normalize=True)

Out[91]:

DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04',

'2019-01-05', '2019-01-06', '2019-01-07', '2019-01-08',

'2019-01-09', '2019-01-10', '2019-01-11', '2019-01-12',

'2019-01-13', '2019-01-14', '2019-01-15', '2019-01-16',

'2019-01-17', '2019-01-18', '2019-01-19', '2019-01-20'],

dtype='datetime64[ns]', freq='D')

频率和日期偏移量

Pandas中的频率是由一个基础频率和一个乘数组成的。基础频率通常以一个字符串别名表示,比如“M”表示每月,“H”表示每小时。对于每个基础频率,都有一个被称为日期偏移量(date offset)的对象与之对应。例如,按小时计算的频率可以Hour类表示:

In [92]: from pandas.tseries.offsets import Hour,Minute

In [93]: hour=Hour()

In [94]: hour

Out[94]: <Hour>

传入一个整数即可定义偏移量的倍数:

In [95]: four_hour=Hour(4)

In [96]: four_hour

Out[96]: <4 * Hours>

在基础频率前面放上一个整数即可创建倍数:

In [97]: pd.date_range('1/1/2019 12:56','1/2/2019 12:56',freq='4h')

Out[97]:

DatetimeIndex(['2019-01-01 12:56:00', '2019-01-01 16:56:00',

'2019-01-01 20:56:00', '2019-01-02 00:56:00',

'2019-01-02 04:56:00', '2019-01-02 08:56:00',

'2019-01-02 12:56:00'],

dtype='datetime64[ns]', freq='4H')

大部分偏移量对象都可通过加法进行连接:

In [99]: Hour(2)+Minute(30)

Out[99]: <150 * Minutes>

同理,也可以传入频率字符串(如‘2h30min’),这种字符串可以被高效地解析为等效的表达式:

In [100]: pd.date_range('1/1/2019',periods=10,freq='1h30min')

Out[100]:

DatetimeIndex(['2019-01-01 00:00:00', '2019-01-01 01:30:00',

'2019-01-01 03:00:00', '2019-01-01 04:30:00',

'2019-01-01 06:00:00', '2019-01-01 07:30:00',

'2019-01-01 09:00:00', '2019-01-01 10:30:00',

'2019-01-01 12:00:00', '2019-01-01 13:30:00'],

dtype='datetime64[ns]', freq='90T')

WOM日期

WOM(Week of Month)是一种非常实用的频率类,它以WOM开头。它使你能获得诸如“每月第3个星期五”之类的日期:

In [102]: rng=pd.date_range('1/1/2019','11/2/2019',freq='WOM-3fri')

In [103]: rng

Out[103]:

DatetimeIndex(['2019-01-18', '2019-02-15', '2019-03-15', '2019-04-19',

'2019-05-17', '2019-06-21', '2019-07-19', '2019-08-16',

'2019-09-20', '2019-10-18'],

dtype='datetime64[ns]', freq='WOM-3FRI')

In [104]: list(rng)

Out[104]:

[Timestamp('2019-01-18 00:00:00', freq='WOM-3FRI'),

Timestamp('2019-02-15 00:00:00', freq='WOM-3FRI'),

Timestamp('2019-03-15 00:00:00', freq='WOM-3FRI'),

Timestamp('2019-04-19 00:00:00', freq='WOM-3FRI'),

Timestamp('2019-05-17 00:00:00', freq='WOM-3FRI'),

Timestamp('2019-06-21 00:00:00', freq='WOM-3FRI'),

Timestamp('2019-07-19 00:00:00', freq='WOM-3FRI'),

Timestamp('2019-08-16 00:00:00', freq='WOM-3FRI'),

Timestamp('2019-09-20 00:00:00', freq='WOM-3FRI'),

Timestamp('2019-10-18 00:00:00', freq='WOM-3FRI')]

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

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

只保留日期_时间序列:日期范围、频率与偏移量相关推荐

  1. python中年月日只保留年月_气轻Python04.只保留日期去掉时间

    有时候需要从读取的Excel数据中查找指定日期的具体数据.而读取日期数据时会带有些不需要的时间等零碎,下面介绍去掉时间,只保留日期的方法. import datetime ############## ...

  2. python如何只保留数字_雷军透露小米或只保留数字、MIX和CC系列 官宣视频首度曝光小米CC...

    近日,关于小米收购美图手机后,将推出第一款带有美图手机基因的新品的消息在网间不胫而走,随后,官方不但透露了该款新机的内部代号为"小仙女",并且,在6月21日,小米集团创始人.董事长 ...

  3. python如何只保留数字_如何查询刷卡消费有没有积分?只需用4个数字马上能查...

    经常有玩卡的朋友问我,我去店里消费了,我如何才能知道这一笔消费有没有积分呢?你有没有什么办法可以查询得到?其实很简单我们只要用4个数字马上就能查到. 信用卡 消费 积分 刷卡 很多人都知道有积分的消费 ...

  4. 怎么传日期参数_时间序列amp;日期学习笔记大全(下)

    作者:湛林 来源:凹凸数据 时间序列&日期学习笔记大全(上) 建议收藏 9. 日期 时间的组成 dt.方法,具体参数及含义详见附件 # 可以通过s.dt.time 获得各种信息s.dt.yea ...

  5. python pandas 日期_python+pandas+时间、日期以及时间序列处理方法

    python+pandas+时间.日期以及时间序列处理方法 先简单的了解下日期和时间数据类型及工具 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time ...

  6. python pandas 日期格式_python+pandas+时间、日期以及时间序列处理方法

    先简单的了解下日期和时间数据类型及工具 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫 ...

  7. 电脑表格日期怎么修改原有日期_表格里日期格式怎么改

    excel表格日期格式设置 excel 表格日期格式设置 篇一:如何在 excel 中设置日期时间格式 excel 中日期时间格式转换问题 1.2019/05/15 如何转换为 20190515 这种 ...

  8. python处理时间的标准函数库_python+pandas+时间、日期以及时间序列处理方法

    先简单的了解下日期和时间数据类型及工具 python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫 ...

  9. sql server 中获取前一天日期_图解SQL面试题:如何比较日期数据?

    ​[题目] 下面是某公司每天的营业额,表名为"日销"."日期"这一列的数据类型是日期类型(date). 请找出所有比前一天(昨天)营业额更高的数据.(前一天的意 ...

最新文章

  1. 【算法导论】【ACM】归并排序总结
  2. nodejs使用带用户和密码的Mongo示例
  3. python flask 学习与实战
  4. LeetCode Longest Valid Parentheses
  5. 转一篇关于并发和并行概念的好文,附带大神评论
  6. docker 删除image_如何用两个小时入门 Docker?
  7. linux创建更改目录,Linux中目录的创建与删除命令使用说明
  8. json.dumps loads 终于区分出来了
  9. Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
  10. python基础代码大全-python基础语法,python 代码命令大全
  11. 诺基亚将于10月26日发布首款WindowsPhone7手机
  12. Ubuntu桌面主题美化推荐(Unity Tweak Tool + Flatabulous)
  13. (附源码)学生社团管理系统app 毕业设计 191850
  14. 二进位注册文件_手工添加注册表项文件reg执行出错,您在注册表编辑器中只能导入二进位注册文件...
  15. PMP考试知识总结【精华--持续更新】
  16. 三角形外接球万能公式_【光速解题】如何秒定各类外接球的球心
  17. ESP8266模块搭建最小系统原理图
  18. javaweb_会话管理(sessionCookie)
  19. Vivado HLS 入门实验
  20. linux中可读可写可执行权限是什么意思,linux chmod 给目录或文件赋权限 可读可写可执行...

热门文章

  1. IE9 Platform Preview 3昨天发布
  2. 使用Acronis Disk Director Suite调整分区大小
  3. websocket的加密和解密过程
  4. bzoj 4563 [Haoi2016]放棋子 错位排列+高精度
  5. [第一章]一、面向对象思想的发展
  6. Quartus13.1全编译出现引脚错误(神级bug)
  7. laravel路由和MVC
  8. 推荐几个手机网站在线预览测试工具
  9. 当systeminfo不能显示系统启动时间了--用命令行修复一下
  10. 如何写博客(网摘)第一步:我是谁?