• pandas-13 时间序列操作方法pd.date_range()


    pandas-13 时间序列操作方法pd.date_range()

    在pandas中拥有强大的时间序列操作方法。
    使用 pd.date_range() 生成 ‘pandas.core.indexes.datetimes.DatetimeIndex’ 对象。

    直接上demo:

    import numpy as np
    import pandas as pd
    from pandas import Series, DataFrame
    from datetime import datetime
    
    
    np.random.seed(666)
    
    # 生成时间对象
    t1 = datetime(2009, 10, 1)
    print(type(t1)) # 2009-10-01 00:00:00 type:<class 'datetime.datetime'>
    
    date_list = [
        datetime(2018, 10, 1),
        datetime(2018, 10, 10),
        datetime(2019, 10, 1),
        datetime(2019, 10, 20),
        datetime(2019, 11, 1)
    ]
    
    print(date_list)
    # [datetime.datetime(2018, 10, 1, 0, 0), datetime.datetime(2018, 10, 10, 0, 0), datetime.datetime(2019, 10, 1, 0, 0), datetime.datetime(2019, 10, 20, 0, 0), datetime.datetime(2019, 11, 1, 0, 0)]
    
    
    s1 = Series(np.random.rand(5), index=date_list)
    print(s1) # index 是 时间 对象
    '''
    2018-10-01    0.700437
    2018-10-10    0.844187
    2019-10-01    0.676514
    2019-10-20    0.727858
    2019-11-01    0.951458
    dtype: float64
    '''
    
    # 直接按照索引进行访问
    print(s1[3]) # 0.7278580572480748
    
    # 传入时间对象访问
    print(s1[datetime(2019, 10, 20)]) # 0.7278580572480748
    
    # 传入字符串
    print(s1['2019-10-20']) # 0.7278580572480748
    
    # 传入字符串2
    print(s1['20191020']) # 0.7278580572480748
    
    # 单纯写 年 月, 可以得到该年月下的所有内容
    print(s1['2019-10'])
    '''
    2019-10-01    0.676514
    2019-10-20    0.727858
    dtype: float64
    '''
    # 原理同上
    print(s1['2019'])
    '''
    2019-10-01    0.676514
    2019-10-20    0.727858
    2019-11-01    0.951458
    dtype: float64
    '''
    
    # date_range() 参数 start 开始时间, periods 间隔时间,freq 按照什么间隔 d w 5h……
    date_list_new = pd.date_range(start='2018-01-1', periods=50, freq='w')
    print(type(date_list_new), date_list_new) # <class 'pandas.core.indexes.datetimes.DatetimeIndex'>
    ''' 一周 默认 从 周日 开始的, 如果需要更改,可以改变 freq='w-mon'
    DatetimeIndex(['2018-01-07', '2018-01-14', '2018-01-21', '2018-01-28',
                   '2018-02-04', '2018-02-11', '2018-02-18', '2018-02-25',
                   '2018-03-04', '2018-03-11', '2018-03-18', '2018-03-25',
                   '2018-04-01', '2018-04-08', '2018-04-15', '2018-04-22',
                   '2018-04-29', '2018-05-06', '2018-05-13', '2018-05-20',
                   '2018-05-27', '2018-06-03', '2018-06-10', '2018-06-17',
                   '2018-06-24', '2018-07-01', '2018-07-08', '2018-07-15',
                   '2018-07-22', '2018-07-29', '2018-08-05', '2018-08-12',
                   '2018-08-19', '2018-08-26', '2018-09-02', '2018-09-09',
                   '2018-09-16', '2018-09-23', '2018-09-30', '2018-10-07',
                   '2018-10-14', '2018-10-21', '2018-10-28', '2018-11-04',
                   '2018-11-11', '2018-11-18', '2018-11-25', '2018-12-02',
                   '2018-12-09', '2018-12-16'],
                  dtype='datetime64[ns]', freq='W-SUN')
    '''
    
    t_range = pd.date_range('2018-1-1', '2018-12-31')
    print(t_range)
    '''
    DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
                   '2018-01-05', '2018-01-06', '2018-01-07', '2018-01-08',
                   '2018-01-09', '2018-01-10',
                   ...
                   '2018-12-22', '2018-12-23', '2018-12-24', '2018-12-25',
                   '2018-12-26', '2018-12-27', '2018-12-28', '2018-12-29',
                   '2018-12-30', '2018-12-31'],
                  dtype='datetime64[ns]', length=365, freq='D')
    '''
    
    s1 = Series(np.random.randn(len(t_range)), index=t_range)
    print(s1)
    
    # 按照每月采样
    # 可以求每个月的平均值,然后生成一个series
    print(s1['2018-1'].mean()) # -0.03690388489355985
    
    # 但是有更简单的方法
    s1_month = s1.resample('M').mean()
    print(s1_month)
    '''
    2018-01-31   -0.036904
    2018-02-28   -0.044257
    2018-03-31    0.037668
    2018-04-30    0.124246
    2018-05-31   -0.119733
    2018-06-30    0.214724
    2018-07-31   -0.123569
    2018-08-31    0.180736
    2018-09-30   -0.113882
    2018-10-31   -0.111971
    2018-11-30   -0.232061
    2018-12-31    0.214558
    Freq: M, dtype: float64
    '''
    print(s1.resample('H').ffill()) # 按小时采样,使用向前填充的方法
    print(s1.resample('H').bfill()) # 向后填充
    
  • 相关阅读:
    image绑定bitmap( Binding Image.Source from download memory)
    c# 调用控制台程序并传参 获取控制台输出(解释器的前台处理)
    varchar和Nvarchar区别
    Response.Redirect:无法在发送 HTTP 标头之后进行重定向
    href="#"与href="javascript:void(0)"的区别
    CSS样式表的优先级别
    若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet
    Jquery下Json数据的传递与解析(asp.net mvc与asp.net api下后台json接收方式的不同)
    knockout.js: Uncaught Error: No Modification Allowed Err
    timepicker, datepicker ,datetimepicker
  • 原文地址:https://www.cnblogs.com/wenqiangit/p/11252790.html
Copyright © 2020-2023  润新知