zoukankan      html  css  js  c++  java
  • python时间序列索引时间

    https://www.zhangshengrong.com/p/281omE7rNw/

    有时候我们的数据是按某个频率收集的,比如每日、每月、每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 每年指定月份的第一个工作日
  • 相关阅读:
    codeforces 455B A Lot of Games(博弈,字典树)
    HDU 4825 Xor Sum(二进制的字典树,数组模拟)
    hdu 1800 Flying to the Mars(简单模拟,string,字符串)
    codeforces 425A Sereja and Swaps(模拟,vector,枚举区间)
    codeforces 425B Sereja and Table(状态压缩,也可以数组模拟)
    HDU 4148 Length of S(n)(字符串)
    codeforces 439D Devu and Partitioning of the Array(有深度的模拟)
    浅谈sass
    京东楼层案例思维逻辑分析
    浅谈localStorage和sessionStorage
  • 原文地址:https://www.cnblogs.com/houfei/p/13529889.html
Copyright © 2011-2022 走看看