【pandas笔记】pandas resample函数

pandas处理数据的时候,可能会遇到分组问题,比如说一组统计数据需要按周分组统计,这时候利用DataFrame中的resample函数就会非常方便与优雅。

本文简单介绍resample函数的一些入门使用方法,方便后来者参考~

官方帮助文档

resample函数的官方介绍可参考https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.resample.html

实例说明

# 导入上图中的数据
>>> df = pd.read_excel(r'resample_data.xlsx')

# 以一周内第一天最为一条记录
>>> df.resample("W", on="date").first()
                 date     open     high  weekday
date                                            
2022-04-17 2022-04-11  9620.50  9644.11        0
2022-04-24 2022-04-18  9473.89  9508.39        0
2022-05-01 2022-04-25  8707.82  8728.92        0
2022-05-08 2022-05-05  8720.32  8883.65        3
2022-05-15 2022-05-09  8761.02  8851.00        0
2022-05-22 2022-05-16  9159.94  9172.02        0
2022-05-29 2022-05-23  8985.73  9005.87        0

# 以一周内最后一天最为一条记录
>>> df.resample("W", on="date").last()
                 date     open     high  weekday
date                                            
2022-04-17 2022-04-15  9460.91  9643.38        4
2022-04-24 2022-04-22  8839.38  8920.13        4
2022-05-01 2022-04-29  8461.67  8750.18        4
2022-05-08 2022-05-06  8650.90  8838.78        4
2022-05-15 2022-05-13  9158.55  9211.67        4
2022-05-22 2022-05-20  8825.58  8976.35        4
2022-05-29 2022-05-25  8572.11  8693.04        2

# 分组聚合,open列取第一天的值,high列取一周内最大值
>>> df.resample("W", on="date").agg({'open':'first', 'high':'max'})
               open     high
date                        
2022-04-17  9620.50  9694.81
2022-04-24  9473.89  9508.39
2022-05-01  8707.82  8750.18
2022-05-08  8720.32  8883.65
2022-05-15  8761.02  9211.67
2022-05-22  9159.94  9172.02
2022-05-29  8985.73  9005.87

# 分组聚合,自定义聚合函数
df.resample("W", on="date").agg({'open':'first', 'high': lambda x: max(x) + 2})
               open     high
date                        
2022-04-17  9620.50  9696.81
2022-04-24  9473.89  9510.39
2022-05-01  8707.82  8752.18
2022-05-08  8720.32  8885.65
2022-05-15  8761.02  9213.67
2022-05-22  9159.94  9174.02
2022-05-29  8985.73  9007.87

遇到的问题

TypeError: Only valid with DatetimeIndex, Timedelta,but got an instance of 'Index'

该错误是resample所触发的,主要意思是对于函数中的on对应的那一列(默认为索引)应该为datetime类型,所以需要将该列转换为时间类型就可以了。

# 如果是索引
data.index = pd.to_datetime(data.index)
# 如果是普通列
df['date'] = pd.to_datetime(df['date'])

参考:resample()错误TypeError: Only valid with DatetimeIndex, Timedelta,but got an instance of 'Index'【已解决】

你可能感兴趣的:(【pandas笔记】pandas resample函数)