python时间序列按频率生成日期的方法


Posted in Python onMay 14, 2019

有时候我们的数据是按某个频率收集的,比如每日、每月、每15分钟,那么我们怎么产生对应频率的索引呢?pandas中的date_range可用于生成指定长度的DatetimeIndex。

我们先看一下怎么生成日期范围:pd.date_range(startdate,enddate)

1.生成指定开始日期和结束日期的时间范围:

In:import pandas as pd
	index = pd.date_range('4/1/2019','5/1/2019')
	print(index)
Out:
DatetimeIndex(['2019-04-01', '2019-04-02', '2019-04-03', '2019-04-04',
        '2019-04-05', '2019-04-06', '2019-04-07', '2019-04-08',
        '2019-04-09', '2019-04-10', '2019-04-11', '2019-04-12',
        '2019-04-13', '2019-04-14', '2019-04-15', '2019-04-16',
        '2019-04-17', '2019-04-18', '2019-04-19', '2019-04-20',
        '2019-04-21', '2019-04-22', '2019-04-23', '2019-04-24',
        '2019-04-25', '2019-04-26', '2019-04-27', '2019-04-28',
        '2019-04-29', '2019-04-30', '2019-05-01'],
       dtype='datetime64[ns]', freq='D')

也可以只指定开始日期或结束日期,但这时必须要输入一个时间长度,并且指定输入的是开始时间还是结束时间,如果不指定默认是开始时间。

date_range(startdate/enddate,periods)

In:print(pd.date_range(start = '4/1/2019',periods = 10))
Out:DatetimeIndex(['2019-04-01', '2019-04-02', '2019-04-03', '2019-04-04',
        '2019-04-05', '2019-04-06', '2019-04-07', '2019-04-08',
        '2019-04-09', '2019-04-10'],
       dtype='datetime64[ns]', freq='D')
In:print(pd.date_range(start = '5/1/2019',periods = 10))
Out:DatetimeIndex(['2019-05-01', '2019-05-02', '2019-05-03', '2019-05-04',
          '2019-05-05', '2019-05-06', '2019-05-07', '2019-05-08',
          '2019-05-09', '2019-05-10'],
         dtype='datetime64[ns]', freq='D')

现在我们已经知道怎么生成日期范围了,但是上面我们生成的日期的时间间隔都是天,接下来告诉大家怎么生成其他时间频率的日期范围。

要生成按某个频率计算的日期范围,只需要在date_range后加上freq就可以了。比如,生成每小时间隔的时间:

In:print(pd.date_range(start = '5/1/2019',periods = 10,freq = 'h'))
Out:DatetimeIndex(['2019-05-01 00:00:00', '2019-05-01 01:00:00',
        '2019-05-01 02:00:00', '2019-05-01 03:00:00',
        '2019-05-01 04:00:00', '2019-05-01 05:00:00',
        '2019-05-01 06:00:00', '2019-05-01 07:00:00',
        '2019-05-01 08:00:00', '2019-05-01 09:00:00'],
       dtype='datetime64[ns]', freq='H')

生成时间间隔为3个小时的时间:

In:print(pd.date_range(start = '5/1/2019',periods = 10,freq = '3h'))
Out:DatetimeIndex(['2019-05-01 00:00:00', '2019-05-01 01:00:00',
        '2019-05-01 02:00:00', '2019-05-01 03:00:00',
        '2019-05-01 04:00:00', '2019-05-01 05:00:00',
        '2019-05-01 06:00:00', '2019-05-01 07:00:00',
        '2019-05-01 08:00:00', '2019-05-01 09:00:00'],
       dtype='datetime64[ns]', freq='H')

生成时间间隔为1小时30分的时间:

In:print(pd.date_range(start = '5/1/2019',periods = 10,freq = '1h30min'))
Out:DatetimeIndex(['2019-05-01 00:00:00', '2019-05-01 01:30:00',
        '2019-05-01 03:00:00', '2019-05-01 04:30:00',
        '2019-05-01 06:00:00', '2019-05-01 07:30:00',
        '2019-05-01 09:00:00', '2019-05-01 10:30:00',
        '2019-05-01 12:00:00', '2019-05-01 13:30:00'],
       dtype='datetime64[ns]', freq='90T')

python还可以生成其他不规则频率的时间,比如每月的第一个工作日,每月的第一个日历日等

生成每月的第一个工作日:

In:print(pd.date_range(start = '1/1/2019',periods = 12,freq = 'BMS'))
Out:DatetimeIndex(['2019-01-01', '2019-02-01', '2019-03-01', '2019-04-01',
        '2019-05-01', '2019-06-03', '2019-07-01', '2019-08-01',
        '2019-09-02', '2019-10-01', '2019-11-01', '2019-12-02'],
       dtype='datetime64[ns]', freq='BMS')

生成每月的第一个日历日:

In:print(pd.date_range(start = '1/1/2019',periods = 12,freq = 'MS'))
Out:DatetimeIndex(['2019-01-01', '2019-02-01', '2019-03-01', '2019-04-01',
        '2019-05-01', '2019-06-01', '2019-07-01', '2019-08-01',
        '2019-09-01', '2019-10-01', '2019-11-01', '2019-12-01'],
       dtype='datetime64[ns]', freq='MS')

有一种很实用的频率类,为“WOM”,即每月的几个星期几。比如每月的第三个星期五。如果我们每月的第三个星期五发工资,这样就可以很方便的知道今年每个月的工资日了。

In:print(pd.date_range(start = '1/1/2019',periods = 12,freq = 'WOM-3FRI'))
Out: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', '2019-11-15', '2019-12-20'],
       dtype='datetime64[ns]', freq='WOM-3FRI')

下面是python可使用的时间序列的基础频率表:

 

别名 偏移量类型 说明
D Day 每日历日
B BusinessDay 每工作日
H Hour 每小时
T或min Minute 每分钟
S Second 每秒
L或ms Milli 每毫秒
U Micro 每微秒
M MonthEnd 每月最后一个日历日
BM BusinessMonthEnd 每月最后一个工作日
MS MonthBegin 每月第一个日历日
BMS BusinessMonthBegin 每月第一个工作日
W-MON、W-TUE Week 每周的星期几
WOM-1MON、WOM-2MON WeekofMonth 每月第几周的星期几
Q-JAN、Q-FEB QuarterEnd 每个季度对应的该月份的最后一个日历日
BQ-JAN、BQ-FEB BusinessQuarterEnd 每个季度对应的该月份的最后一个工作日
QS-JAN、QS-FEB QuarterBegin 每个季度对应的该月份的第一个日历日
BQS-JAN、BQS-FEB QuarterBegin 每个季度对应的该月份的第一个工作日
A-JAN、B-FEB YearEnd 每年指定月份的最后一个日历日
BA-JAN、BA-FEB BusinessYearEnd 每年指定月份的最后一个工作日
AS-JAN、AS-FEB YearBegin 每年指定月份的第一个日历日
BAS-JAN、BAS-FEB BusinessYearBegin 每年指定月份的第一个工作日

以上所述是小编给大家介绍的python时间序列按频率生成日期的方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
跟老齐学Python之私有函数和专有方法
Oct 24 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
python库lxml在linux和WIN系统下的安装
Jun 24 Python
python中sys.argv函数精简概括
Jul 08 Python
破解安装Pycharm的方法
Oct 19 Python
Python中Numpy mat的使用详解
May 24 Python
python自定义时钟类、定时任务类
Feb 22 Python
Python如何优雅获取本机IP方法
Nov 10 Python
NumPy排序的实现
Jan 21 Python
python 命令行传参方法总结
May 25 Python
Django使用echarts进行可视化展示的实践
Jun 10 Python
python开发飞机大战游戏
Jul 15 Python
python的依赖管理的实现
May 14 #Python
详解Python3序列赋值、序列解包
May 14 #Python
Python实战之制作天气查询软件
May 14 #Python
python中时间模块的基本使用教程
May 14 #Python
使用Python正则表达式操作文本数据的方法
May 14 #Python
Django如何防止定时任务并发浅析
May 14 #Python
python3 pygame实现接小球游戏
May 14 #Python
You might like
PHP检测字符串是否为UTF8编码的常用方法
2014/11/21 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
php实现的rc4加密解密类定义与用法示例
2018/08/16 PHP
本地对象Array的原型扩展实现代码
2010/12/04 Javascript
javascript 上下banner替换具体实现
2013/11/14 Javascript
js控制TR的显示隐藏
2016/03/04 Javascript
JavaScript预解析及相关技巧分析
2016/04/21 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
2018/09/03 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
如何在wxml中直接写js代码(wxs)
2019/11/14 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
[01:32]寻找你心中的那团火 DOTA2 TI9火焰传递活动今日开启
2019/05/16 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python的Flask框架中Flask-Admin库的简单入门指引
2015/04/07 Python
python中assert用法实例分析
2015/04/30 Python
python黑魔法之参数传递
2016/02/12 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
解决pandas .to_excel不覆盖已有sheet的问题
2018/12/10 Python
python selenium执行所有测试用例并生成报告的方法
2019/02/13 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
Python经典五人分鱼实例讲解
2021/01/04 Python
单身旅行者的单身假期:Just You
2018/04/08 全球购物
倩碧英国官网:Clinique英国
2018/08/10 全球购物
美国第一大药店连锁机构:Walgreens(沃尔格林)
2019/10/10 全球购物
党风廉设责任书
2014/04/16 职场文书
高中生班主任评语
2014/04/25 职场文书
家长会开场白和结束语
2015/05/29 职场文书
市语委办2016年第十九届“推普周”活动总结
2016/04/05 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫