python时间序列按频率⽣成⽇期的⽅法
有时候我们的数据是按某个频率收集的,⽐如每⽇、每⽉、每15分钟,那么我们怎么产⽣对应频率的索引呢?pandas中的
date_range可⽤于⽣成指定长度的DatetimeIndex。
我们先看⼀下怎么⽣成⽇期范围:_range(startdate,enddate)
1.⽣成指定开始⽇期和结束⽇期的时间范围:
In:importpandasaspd
index=_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(_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(_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(_range(start='5/1/2019',periods=10,freq='h'))
Out:DatetimeIndex(['2019-05-0100:00:00','2019-05-0101:00:00',
'2019-05-0102:00:00','2019-05-0103:00:00',
'2019-05-0104:00:00','2019-05-0105:00:00',
'2019-05-0106:00:00','2019-05-0107:00:00',
'2019-05-0108:00:00','2019-05-0109:00:00'],
dtype='datetime64[ns]',freq='H')
⽣成时间间隔为3个⼩时的时间:
In:print(_range(start='5/1/2019',periods=10,freq='3h'))
Out:DatetimeIndex(['2019-05-0100:00:00','2019-05-0101:00:00',
'2019-05-0102:00:00','2019-05-0103:00:00',
'2019-05-0104:00:00','2019-05-0105:00:00',
'2019-05-0106:00:00','2019-05-0107:00:00',
'2019-05-0108:00:00','2019-05-0109:00:00'],
dtype='datetime64[ns]',freq='H')
⽣成时间间隔为1⼩时30分的时间:
In:print(_range(start='5/1/2019',periods=10,freq='1h30min'))
Out:DatetimeIndex(['2019-05-0100:00:00','2019-05-0101:30:00',
'2019-05-0103:00:00','2019-05-0104:30:00',
'2019-05-0106:00:00','2019-05-0107:30:00',
'2019-05-0109:00:00','2019-05-0110:30:00',
'2019-05-0112:00:00','2019-05-0113:30:00'],
dtype='datetime64[ns]',freq='90T')
python还可以⽣成其他不规则频率的时间,⽐如每⽉的第⼀个⼯作⽇,每⽉的第⼀个⽇历⽇等
⽣成每⽉的第⼀个⼯作⽇:
In:print(_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(_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(_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可使⽤的时间序列的基础频率表:
别名偏移量类型说明
DDay每⽇历⽇
BBusinessDay每⼯作⽇
HHour每⼩时
T或minMinute每分钟
SSecond每秒
L或msMilli每毫秒
UMicro每微秒
MMonthEnd每⽉最后⼀个⽇历⽇
BMBusinessMonthEnd每⽉最后⼀个⼯作⽇
MSMonthBegin每⽉第⼀个⽇历⽇
BMSBusinessMonthBegin每⽉第⼀个⼯作⽇
W-MON、W-TUEWeek每周的星期⼏
WOM-1MON、WOM-2MONWeekofMonth每⽉第⼏周的星期⼏
Q-JAN、Q-FEBQuarterEnd每个季度对应的该⽉份的最后⼀个⽇历⽇
BQ-JAN、BQ-FEBBusinessQuarterEnd每个季度对应的该⽉份的最后⼀个⼯作⽇
QS-JAN、QS-FEBQuarterBegin每个季度对应的该⽉份的第⼀个⽇历⽇
BQS-JAN、BQS-FEBQuarterBegin每个季度对应的该⽉份的第⼀个⼯作⽇
A-JAN、B-FEBYearEnd每年指定⽉份的最后⼀个⽇历⽇
BA-JAN、BA-FEBBusinessYearEnd每年指定⽉份的最后⼀个⼯作⽇
AS-JAN、AS-FEBYearBegin每年指定⽉份的第⼀个⽇历⽇
BAS-JAN、BAS-FEBBusinessYearBegin每年指定⽉份的第⼀个⼯作⽇
以上所述是⼩编给⼤家介绍的python时间序列按频率⽣成⽇期的⽅法详解整合,希望对⼤家有所帮助,如果⼤家有任何疑问请
给我留⾔,⼩编会及时回复⼤家的。在此也⾮常感谢⼤家对⽹站的⽀持!
本文发布于:2023-01-04 02:46:08,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/88132.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |