美文网首页
8-Pandas时间戳索引:DatetimeIndex

8-Pandas时间戳索引:DatetimeIndex

作者: 蓝剑狼 | 来源:发表于2018-08-19 23:05 被阅读521次

    核心:pd.date_range()

    # pd.DatetimeIndex()与TimeSeries时间序列
    
    rng = pd.DatetimeIndex(['12/1/2017','12/2/2017','12/3/2017','12/4/2017','12/5/2017'])
    print("1".center(40,'*'))
    print(rng,type(rng))
    print("2".center(40,'*'))
    print(rng[0],type(rng[0]))
    # 直接生成时间戳索引,支持str、datetime.datetime
    # 单个时间戳为Timestamp,多个时间戳为DatetimeIndex
    
    st = pd.Series(np.random.rand(len(rng)), index = rng)
    print("3".center(40,'*'))
    print(st,type(st))
    print("4".center(40,'*'))
    print(st.index)
    # 以DatetimeIndex为index的Series,为TimeSries,时间序列
    #执行结果
    *******************1********************
    DatetimeIndex(['2017-12-01', '2017-12-02', '2017-12-03', '2017-12-04',
                   '2017-12-05'],
                  dtype='datetime64[ns]', freq=None) <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
    *******************2********************
    2017-12-01 00:00:00 <class 'pandas._libs.tslibs.timestamps.Timestamp'>
    *******************3********************
    2017-12-01    0.700239
    2017-12-02    0.579206
    2017-12-03    0.360233
    2017-12-04    0.704604
    2017-12-05    0.505148
    dtype: float64 <class 'pandas.core.series.Series'>
    *******************4********************
    DatetimeIndex(['2017-12-01', '2017-12-02', '2017-12-03', '2017-12-04',
                   '2017-12-05'],
                  dtype='datetime64[ns]', freq=None)
    
    # pd.date_range()-日期范围:生成日期范围
    # 2种生成方式:①start + end; ②start/end + periods
    # 默认频率:day
    
    rng1 = pd.date_range('1/1/2017','1/10/2017', normalize=True)
    rng2 = pd.date_range(start = '1/1/2017', periods = 10)
    rng3 = pd.date_range(end = '1/30/2017 15:00:00', periods = 10)  # 增加了时、分、秒
    print(rng1,type(rng1))
    print(rng2)
    print(rng3)
    # 直接生成DatetimeIndex
    # pd.date_range(start=None, end=None, periods=None, freq='D', tz=None, normalize=False, name=None, closed=None, **kwargs)
    # start:开始时间
    # end:结束时间
    # periods:偏移量
    # freq:频率,默认天,pd.date_range()默认频率为日历日,pd.bdate_range()默认频率为工作日
    # tz:时区
    # 执行结果
    DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
                   '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
                   '2017-01-09', '2017-01-10'],
                  dtype='datetime64[ns]', freq='D') <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
    DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
                   '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
                   '2017-01-09', '2017-01-10'],
                  dtype='datetime64[ns]', freq='D')
    DatetimeIndex(['2017-01-21 15:00:00', '2017-01-22 15:00:00',
                   '2017-01-23 15:00:00', '2017-01-24 15:00:00',
                   '2017-01-25 15:00:00', '2017-01-26 15:00:00',
                   '2017-01-27 15:00:00', '2017-01-28 15:00:00',
                   '2017-01-29 15:00:00', '2017-01-30 15:00:00'],
                  dtype='datetime64[ns]', freq='D')
    
    rng4 = pd.date_range(start = '1/1/2017 15:30', periods = 10, name = 'hello world!', normalize = True)
    print("1".center(40,'*'))
    print(rng4)
    
    # normalize:时间参数值正则化到午夜时间戳(这里最后就直接变成0:00:00,并不是15:30:00)
    # name:索引对象名称
    print("2".center(40,'*'))
    print(pd.date_range('20170101','20170104'))  # 20170101也可读取
    print(pd.date_range('20170101','20170104',closed = 'right'))
    print(pd.date_range('20170101','20170104',closed = 'left'))
    # closed:默认为None的情况下,左闭右闭,left则左闭右开,right则左开右闭
    print("3".center(40,'*'))
    print(pd.bdate_range('20170101','20170107'))
    # pd.bdate_range()默认频率为工作日
    print("4".center(40,'*'))
    print(list(pd.date_range(start = '1/1/2017', periods = 10)))
    # 直接转化为list,元素为Timestamp
    #执行结果
    *******************1********************
    DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
                   '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
                   '2017-01-09', '2017-01-10'],
                  dtype='datetime64[ns]', name='hello world!', freq='D')
    *******************2********************
    DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04'], dtype='datetime64[ns]', freq='D')
    DatetimeIndex(['2017-01-02', '2017-01-03', '2017-01-04'], dtype='datetime64[ns]', freq='D')
    DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03'], dtype='datetime64[ns]', freq='D')
    *******************3********************
    DatetimeIndex(['2017-01-02', '2017-01-03', '2017-01-04', '2017-01-05',
                   '2017-01-06'],
                  dtype='datetime64[ns]', freq='B')
    *******************4********************
    [Timestamp('2017-01-01 00:00:00', freq='D'), Timestamp('2017-01-02 00:00:00', freq='D'), Timestamp('2017-01-03 00:00:00', freq='D'), Timestamp('2017-01-04 00:00:00', freq='D'), Timestamp('2017-01-05 00:00:00', freq='D'), Timestamp('2017-01-06 00:00:00', freq='D'), Timestamp('2017-01-07 00:00:00', freq='D'), Timestamp('2017-01-08 00:00:00', freq='D'), Timestamp('2017-01-09 00:00:00', freq='D'), Timestamp('2017-01-10 00:00:00', freq='D')]
    
    # pd.date_range()-日期范围:频率(1)
    
    print(pd.date_range('2017/1/1','2017/1/4'))  # 默认freq = 'D':每日历日
    print(pd.date_range('2017/1/1','2017/1/4', freq = 'B'))  # B:每工作日
    print(pd.date_range('2017/1/1','2017/1/2', freq = 'H'))  # H:每小时
    print(pd.date_range('2017/1/1 12:00','2017/1/1 12:10', freq = 'T'))  # T/MIN:每分
    print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'S'))  # S:每秒
    print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'L'))  # L:每毫秒(千分之一秒)
    print(pd.date_range('2017/1/1 12:00:00','2017/1/1 12:00:10', freq = 'U'))  # U:每微秒(百万分之一秒)
    
    print(pd.date_range('2017/1/1','2017/2/1', freq = 'W-MON'))  
    # W-MON:从指定星期几开始算起,每周
    # 星期几缩写:MON/TUE/WED/THU/FRI/SAT/SUN
    
    print(pd.date_range('2017/1/1','2017/5/1', freq = 'WOM-2MON'))  
    # WOM-2MON:每月的第几个星期几开始算,这里是每月第二个星期一
    #执行结果
    DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04'], dtype='datetime64[ns]', freq='D')
    DatetimeIndex(['2017-01-02', '2017-01-03', '2017-01-04'], dtype='datetime64[ns]', freq='B')
    DatetimeIndex(['2017-01-01 00:00:00', '2017-01-01 01:00:00',
                   '2017-01-01 02:00:00', '2017-01-01 03:00:00',
                   '2017-01-01 04:00:00', '2017-01-01 05:00:00',
                   '2017-01-01 06:00:00', '2017-01-01 07:00:00',
                   '2017-01-01 08:00:00', '2017-01-01 09:00:00',
                   '2017-01-01 10:00:00', '2017-01-01 11:00:00',
                   '2017-01-01 12:00:00', '2017-01-01 13:00:00',
                   '2017-01-01 14:00:00', '2017-01-01 15:00:00',
                   '2017-01-01 16:00:00', '2017-01-01 17:00:00',
                   '2017-01-01 18:00:00', '2017-01-01 19:00:00',
                   '2017-01-01 20:00:00', '2017-01-01 21:00:00',
                   '2017-01-01 22:00:00', '2017-01-01 23:00:00',
                   '2017-01-02 00:00:00'],
                  dtype='datetime64[ns]', freq='H')
    DatetimeIndex(['2017-01-01 12:00:00', '2017-01-01 12:01:00',
                   '2017-01-01 12:02:00', '2017-01-01 12:03:00',
                   '2017-01-01 12:04:00', '2017-01-01 12:05:00',
                   '2017-01-01 12:06:00', '2017-01-01 12:07:00',
                   '2017-01-01 12:08:00', '2017-01-01 12:09:00',
                   '2017-01-01 12:10:00'],
                  dtype='datetime64[ns]', freq='T')
    DatetimeIndex(['2017-01-01 12:00:00', '2017-01-01 12:00:01',
                   '2017-01-01 12:00:02', '2017-01-01 12:00:03',
                   '2017-01-01 12:00:04', '2017-01-01 12:00:05',
                   '2017-01-01 12:00:06', '2017-01-01 12:00:07',
                   '2017-01-01 12:00:08', '2017-01-01 12:00:09',
                   '2017-01-01 12:00:10'],
                  dtype='datetime64[ns]', freq='S')
    DatetimeIndex([       '2017-01-01 12:00:00', '2017-01-01 12:00:00.001000',
                   '2017-01-01 12:00:00.002000', '2017-01-01 12:00:00.003000',
                   '2017-01-01 12:00:00.004000', '2017-01-01 12:00:00.005000',
                   '2017-01-01 12:00:00.006000', '2017-01-01 12:00:00.007000',
                   '2017-01-01 12:00:00.008000', '2017-01-01 12:00:00.009000',
                   ...
                   '2017-01-01 12:00:09.991000', '2017-01-01 12:00:09.992000',
                   '2017-01-01 12:00:09.993000', '2017-01-01 12:00:09.994000',
                   '2017-01-01 12:00:09.995000', '2017-01-01 12:00:09.996000',
                   '2017-01-01 12:00:09.997000', '2017-01-01 12:00:09.998000',
                   '2017-01-01 12:00:09.999000',        '2017-01-01 12:00:10'],
                  dtype='datetime64[ns]', length=10001, freq='L')
    DatetimeIndex([       '2017-01-01 12:00:00', '2017-01-01 12:00:00.000001',
                   '2017-01-01 12:00:00.000002', '2017-01-01 12:00:00.000003',
                   '2017-01-01 12:00:00.000004', '2017-01-01 12:00:00.000005',
                   '2017-01-01 12:00:00.000006', '2017-01-01 12:00:00.000007',
                   '2017-01-01 12:00:00.000008', '2017-01-01 12:00:00.000009',
                   ...
                   '2017-01-01 12:00:09.999991', '2017-01-01 12:00:09.999992',
                   '2017-01-01 12:00:09.999993', '2017-01-01 12:00:09.999994',
                   '2017-01-01 12:00:09.999995', '2017-01-01 12:00:09.999996',
                   '2017-01-01 12:00:09.999997', '2017-01-01 12:00:09.999998',
                   '2017-01-01 12:00:09.999999',        '2017-01-01 12:00:10'],
                  dtype='datetime64[ns]', length=10000001, freq='U')
    DatetimeIndex(['2017-01-02', '2017-01-09', '2017-01-16', '2017-01-23',
                   '2017-01-30'],
                  dtype='datetime64[ns]', freq='W-MON')
    DatetimeIndex(['2017-01-09', '2017-02-13', '2017-03-13', '2017-04-10'], dtype='datetime64[ns]', freq='WOM-2MON')
    
    # pd.date_range()-日期范围:频率(2)
    print("1".center(40,'*'))
    print(pd.date_range('2017','2018', freq = 'M'))  
    print(pd.date_range('2017','2020', freq = 'Q-DEC'))  
    print(pd.date_range('2017','2020', freq = 'A-DEC')) 
    
    # M:每月最后一个日历日
    # Q-月:指定月为季度末,每个季度末最后一月的最后一个日历日
    # A-月:每年指定月份的最后一个日历日
    # 月缩写:JAN/FEB/MAR/APR/MAY/JUN/JUL/AUG/SEP/OCT/NOV/DEC
    # 所以Q-月只有三种情况:1-4-7-10,2-5-8-11,3-6-9-12
    print("2".center(40,'*'))
    print(pd.date_range('2017','2018', freq = 'BM'))  
    print(pd.date_range('2017','2020', freq = 'BQ-DEC'))  
    print(pd.date_range('2017','2020', freq = 'BA-DEC')) 
    # BM:每月最后一个工作日
    # BQ-月:指定月为季度末,每个季度末最后一月的最后一个工作日
    # BA-月:每年指定月份的最后一个工作日
    print("3".center(40,'*'))
    print(pd.date_range('2017','2018', freq = 'MS'))  
    print(pd.date_range('2017','2020', freq = 'QS-DEC'))  
    print(pd.date_range('2017','2020', freq = 'AS-DEC')) 
    # M:每月第一个日历日
    # Q-月:指定月为季度末,每个季度末最后一月的第一个日历日
    # A-月:每年指定月份的第一个日历日
    print("4".center(40,'*'))
    print(pd.date_range('2017','2018', freq = 'BMS'))  
    print(pd.date_range('2017','2020', freq = 'BQS-DEC'))  
    print(pd.date_range('2017','2020', freq = 'BAS-DEC')) 
    # BM:每月第一个工作日
    # BQ-月:指定月为季度末,每个季度末最后一月的第一个工作日
    # BA-月:每年指定月份的第一个工作日
    # 执行结果
    *******************1********************
    DatetimeIndex(['2017-01-31', '2017-02-28', '2017-03-31', '2017-04-30',
                   '2017-05-31', '2017-06-30', '2017-07-31', '2017-08-31',
                   '2017-09-30', '2017-10-31', '2017-11-30', '2017-12-31'],
                  dtype='datetime64[ns]', freq='M')
    DatetimeIndex(['2017-03-31', '2017-06-30', '2017-09-30', '2017-12-31',
                   '2018-03-31', '2018-06-30', '2018-09-30', '2018-12-31',
                   '2019-03-31', '2019-06-30', '2019-09-30', '2019-12-31'],
                  dtype='datetime64[ns]', freq='Q-DEC')
    DatetimeIndex(['2017-12-31', '2018-12-31', '2019-12-31'], dtype='datetime64[ns]', freq='A-DEC')
    *******************2********************
    DatetimeIndex(['2017-01-31', '2017-02-28', '2017-03-31', '2017-04-28',
                   '2017-05-31', '2017-06-30', '2017-07-31', '2017-08-31',
                   '2017-09-29', '2017-10-31', '2017-11-30', '2017-12-29'],
                  dtype='datetime64[ns]', freq='BM')
    DatetimeIndex(['2017-03-31', '2017-06-30', '2017-09-29', '2017-12-29',
                   '2018-03-30', '2018-06-29', '2018-09-28', '2018-12-31',
                   '2019-03-29', '2019-06-28', '2019-09-30', '2019-12-31'],
                  dtype='datetime64[ns]', freq='BQ-DEC')
    DatetimeIndex(['2017-12-29', '2018-12-31', '2019-12-31'], dtype='datetime64[ns]', freq='BA-DEC')
    *******************3********************
    DatetimeIndex(['2017-01-01', '2017-02-01', '2017-03-01', '2017-04-01',
                   '2017-05-01', '2017-06-01', '2017-07-01', '2017-08-01',
                   '2017-09-01', '2017-10-01', '2017-11-01', '2017-12-01',
                   '2018-01-01'],
                  dtype='datetime64[ns]', freq='MS')
    DatetimeIndex(['2017-03-01', '2017-06-01', '2017-09-01', '2017-12-01',
                   '2018-03-01', '2018-06-01', '2018-09-01', '2018-12-01',
                   '2019-03-01', '2019-06-01', '2019-09-01', '2019-12-01'],
                  dtype='datetime64[ns]', freq='QS-DEC')
    DatetimeIndex(['2017-12-01', '2018-12-01', '2019-12-01'], dtype='datetime64[ns]', freq='AS-DEC')
    *******************4********************
    DatetimeIndex(['2017-01-02', '2017-02-01', '2017-03-01', '2017-04-03',
                   '2017-05-01', '2017-06-01', '2017-07-03', '2017-08-01',
                   '2017-09-01', '2017-10-02', '2017-11-01', '2017-12-01',
                   '2018-01-01'],
                  dtype='datetime64[ns]', freq='BMS')
    DatetimeIndex(['2017-03-01', '2017-06-01', '2017-09-01', '2017-12-01',
                   '2018-03-01', '2018-06-01', '2018-09-03', '2018-12-03',
                   '2019-03-01', '2019-06-03', '2019-09-02', '2019-12-02'],
                  dtype='datetime64[ns]', freq='BQS-DEC')
    DatetimeIndex(['2017-12-01', '2018-12-03', '2019-12-02'], dtype='datetime64[ns]', freq='BAS-DEC')
    
    # pd.date_range()-日期范围:复合频率
    
    print(pd.date_range('2017/1/1','2017/2/1', freq = '7D'))  # 7天
    print(pd.date_range('2017/1/1','2017/1/2', freq = '2h30min'))  # 2小时30分钟
    print(pd.date_range('2017','2018', freq = '2M'))  # 2月,每月最后一个日历日
    #执行结果
    DatetimeIndex(['2017-01-01', '2017-01-08', '2017-01-15', '2017-01-22',
                   '2017-01-29'],
                  dtype='datetime64[ns]', freq='7D')
    DatetimeIndex(['2017-01-01 00:00:00', '2017-01-01 02:30:00',
                   '2017-01-01 05:00:00', '2017-01-01 07:30:00',
                   '2017-01-01 10:00:00', '2017-01-01 12:30:00',
                   '2017-01-01 15:00:00', '2017-01-01 17:30:00',
                   '2017-01-01 20:00:00', '2017-01-01 22:30:00'],
                  dtype='datetime64[ns]', freq='150T')
    DatetimeIndex(['2017-01-31', '2017-03-31', '2017-05-31', '2017-07-31',
                   '2017-09-30', '2017-11-30'],
                  dtype='datetime64[ns]', freq='2M')
    

    相关文章

      网友评论

          本文标题:8-Pandas时间戳索引:DatetimeIndex

          本文链接:https://www.haomeiwen.com/subject/uvzebftx.html