• Pandas数据分析24——pandas时间重采样聚合


     参考书目:《深入浅出Pandas:利用Python进行数据处理与分析》


    pandas对数据可以进行频率的更改,比如将每五分钟的数据改为每分钟的数据,或者将高频的小时数据改为日期数据,都很方便。主要依赖resample()方法。


    还是先导入包

    1. import numpy as np
    2. import pandas as pd
    3. import datetime

    时间格式化

    1. #解析时间
    2. pd.Timestamp('now').strftime('%Y年%m月%d日')
    3. pd.to_datetime('2022*11*12',format='%Y*%m*%d')


    时间重采样

    #resample() 是一个基于时间的分组依据,后面是每个分组的聚合方法。

    1. rng = pd.date_range('1/1/2012', periods=1000, freq='S')
    2. ts = pd.Series(np.random.randint(0, 500, len(rng)), index=rng)
    3. ts

    原始数据是一秒钟一条

     # 每5分钟进行一次聚合

    ts.resample('5Min').sum()

     #重采样功能非常灵活,可以指定许多不同的参数来控制频率转换和重采样操作。
    #通过分派可用的任何函数(类似于 grouby)都可以作为返回对象的方法,包括 sum,mean,std,sem,max,min,mid,median,first,last,ohlc:

    1. ts.resample('5Min').mean() # 平均
    2. ts.resample('5Min').max() # 最大值

    ohlc美国线

     #ohlc类似股票的K线,蜡烛图,能展示这个区间的开始值,最高值,最低值,收盘值

    ts.resample('5Min').ohlc()

     #开闭区间指定

    1. #对于采样,可以将 closed 设置为“ left”或“ right”,以指定关闭区间的哪一端:
    2. ts.resample('5Min', closed='right').mean()
    3. ts.resample('5Min', closed='left').mean()

     


    上采样

    #把数据扩充到更高的时间频率

     #对于上采样,您可以指定一种上采样的方法,并指定 limit 参数以对创建的间隙进行插值:

    1. # 从每秒到每250毫秒
    2. ts.resample('250L').asfreq()

     填充

    1. ts.resample('250L').ffill()
    2. ts.resample('250L').bfill(limit=2)

    重采样聚合

     #类似于 aggregating API, groupby API, 和窗口方法 api, Resampler 也适用相关方法。重新采样DataFrame时,默认值是对具有相同功能的所有列进行操作:

    1. df = pd.DataFrame(np.random.randn(1000, 3),index=pd.date_range('1/1/2012', freq='S', periods=1000),columns=['A', 'B', 'C'])
    2. r = df.resample('3T')
    3. r.mean()

     选取部分列

    1. r['A'].mean()
    2. r[['A', 'B']].mean()

     #多个聚合方式:

    1. #多个聚合方式:
    2. r['A'].agg([np.sum, np.mean, np.std])
    3. r.agg([np.sum, np.mean]) # 每个列
    4. # 不同的聚合方式
    5. r.agg({'A': np.sum,
    6. 'B': lambda x: np.std(x, ddof=1)})
    7. # 用字符指定
    8. r.agg({'A': 'sum', 'B': 'std'})
    9. r.agg({'A': ['sum', 'std'], 'B': ['mean', 'std']})

    #如果索引不是时间,可以指定采样的时间列:

    1. # date 是一个普通列
    2. df.resample('M', on='date').sum()
    3. df.resample('M', level='d').sum() # 多层索引

    时间类型间转化

     #本文介绍不同时间概念之间的相互转换。带时间戳的数据可以使用 to_period 转换为PeriodIndex-ed 数据,反之亦然可以使用 to_timestamp 转换为 PeriodIndex-ed 数据。

    1. rng = pd.date_range('1/1/2012', periods=5, freq='M')
    2. ts = pd.Series(np.random.randn(len(rng)), index=rng)
    3. ts

    1. ps = ts.to_period()
    2. ps

    ps.to_timestamp()

     

  • 相关阅读:
    android studio启动虚拟器失败
    空间金字塔池化改进 SPP / SPPF / ASPP / RFB / SPPCSPC
    主打低功耗物联网国产替代,纵行科技ZT1826芯片以速率和灵敏度出圈
    Linux编译器——gcc/g++的使用
    初识操作系统
    【课程发布】软考高项目十大管理ITTO宫殿记忆法新版第四版正式发布
    2022-Q3
    ETCD数据库源码分析——gRPC 拦截器
    telnet|nc 命令返回“连接失败”
    eBay产品刊登的流程,eBay平台多品类规则——站斧浏览器
  • 原文地址:https://blog.csdn.net/weixin_46277779/article/details/126307851