python按时间间隔划分时间序列-python时间序列按频率生成日期

有时候我们的数据是按某个频率收集的,比如每日、每月、每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")

1

2

3

4

5

6

7

8

9

10

11

12

13

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

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")

1

2

3

4

5

6

7

8

9

10

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

要生成按某个频率计算的日期范围,只需要在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")

1

2

3

4

5

6

7

生成时间间隔为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

2

3

4

5

6

7

生成时间间隔为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")

1

2

3

4

5

6

7

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")

1

2

3

4

5

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

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")

1

2

3

4

5

有一种很实用的频率类,为“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")

1

2

3

4

5

下面是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每年指定月份的第一个工作日

---------------------

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值