Pandas中resample方法详解


Posted in Python onJuly 02, 2019

Pandas中的resample,重新采样,是对原样本重新处理的一个方法,是一个对常规时间序列数据重新采样和频率转换的便捷的方法。

方法的格式是:

DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start',kind=None, loffset=None, limit=None, base=0)

参数详解是:

参数 说明
freq 表示重采样频率,例如‘M'、‘5min',Second(15)
how='mean' 用于产生聚合值的函数名或数组函数,例如‘mean'、‘ohlc'、np.max等,默认是‘mean',其他常用的值由:‘first'、‘last'、‘median'、‘max'、‘min'
axis=0 默认是纵轴,横轴设置axis=1
fill_method = None 升采样时如何插值,比如‘ffill'、‘bfill'等
closed = ‘right' 在降采样时,各时间段的哪一段是闭合的,‘right'或‘left',默认‘right'
label= ‘right' 在降采样时,如何设置聚合值的标签,例如,9:30-9:35会被标记成9:30还是9:35,默认9:35
loffset = None 面元标签的时间校正值,比如‘-1s'或Second(-1)用于将聚合标签调早1秒
limit=None 在向前或向后填充时,允许填充的最大时期数
kind = None 聚合到时期(‘period')或时间戳(‘timestamp'),默认聚合到时间序列的索引类型
convention = None 当重采样时期时,将低频率转换到高频率所采用的约定(start或end)。默认‘end'

首先创建一个Series,采样频率为一分钟。

>>> index = pd.date_range('1/1/2000', periods=9, freq='T')
>>> series = pd.Series(range(9), index=index)
>>> series
2000-01-01 00:00:00  0
2000-01-01 00:01:00  1
2000-01-01 00:02:00  2
2000-01-01 00:03:00  3
2000-01-01 00:04:00  4
2000-01-01 00:05:00  5
2000-01-01 00:06:00  6
2000-01-01 00:07:00  7
2000-01-01 00:08:00  8
Freq: T, dtype: int64

降低采样频率为三分钟

>>> series.resample('3T').sum()
2000-01-01 00:00:00   3
2000-01-01 00:03:00  12
2000-01-01 00:06:00  21
Freq: 3T, dtype: int64

降低采样频率为三分钟,但是每个标签使用right来代替left。请注意,bucket中值的用作标签。

>>> series.resample('3T', label='right').sum()
2000-01-01 00:03:00   3
2000-01-01 00:06:00  12
2000-01-01 00:09:00  21
Freq: 3T, dtype: int64

降低采样频率为三分钟,但是关闭right区间。

>>> series.resample('3T', label='right', closed='right').sum()
2000-01-01 00:00:00   0
2000-01-01 00:03:00   6
2000-01-01 00:06:00  15
2000-01-01 00:09:00  15
Freq: 3T, dtype: int64

增加采样频率到30秒

>>> series.resample('30S').asfreq()[0:5] #select first 5 rows
2000-01-01 00:00:00   0
2000-01-01 00:00:30  NaN
2000-01-01 00:01:00   1
2000-01-01 00:01:30  NaN
2000-01-01 00:02:00   2
Freq: 30S, dtype: float64

增加采样频率到30S,使用pad方法填充nan值。

>>> series.resample('30S').pad()[0:5]
2000-01-01 00:00:00  0
2000-01-01 00:00:30  0
2000-01-01 00:01:00  1
2000-01-01 00:01:30  1
2000-01-01 00:02:00  2
Freq: 30S, dtype: int64

增加采样频率到30S,使用bfill方法填充nan值。

>>> series.resample('30S').bfill()[0:5]
2000-01-01 00:00:00  0
2000-01-01 00:00:30  1
2000-01-01 00:01:00  1
2000-01-01 00:01:30  2
2000-01-01 00:02:00  2
Freq: 30S, dtype: int64

通过apply运行一个自定义函数

>>> def custom_resampler(array_like):
...   return np.sum(array_like)+5
>>> series.resample('3T').apply(custom_resampler)
2000-01-01 00:00:00   8
2000-01-01 00:03:00  17
2000-01-01 00:06:00  26
Freq: 3T, dtype: int64

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用beautifulsoup从爱奇艺网抓取视频播放
Jan 23 Python
基于python编写的微博应用
Oct 17 Python
Python进阶学习之特殊方法实例详析
Dec 01 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
Python lambda表达式filter、map、reduce函数用法解析
Sep 11 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
Mar 23 Python
Python PyQt5整理介绍
Apr 01 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
python PyAUtoGUI库实现自动化控制鼠标键盘
Sep 09 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
Python实现EM算法实例代码
Oct 04 Python
python 基于wx实现音乐播放
Nov 24 Python
Python何时应该使用Lambda函数
Jul 02 #Python
Python Pandas分组聚合的实现方法
Jul 02 #Python
使用Python做垃圾分类的原理及实例代码附源码
Jul 02 #Python
python flask框架实现重定向功能示例
Jul 02 #Python
python实现串口自动触发工作的示例
Jul 02 #Python
python常用函数与用法示例
Jul 02 #Python
pandas DataFrame 行列索引及值的获取的方法
Jul 02 #Python
You might like
php绘制一条直线的方法
2015/01/24 PHP
PHP中COOKIES使用示例
2015/07/26 PHP
php实现简单爬虫的开发
2016/03/28 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
js的延迟执行问题分析
2014/06/23 Javascript
jQuery实现左右切换焦点图
2015/04/03 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
jQuery验证插件validate使用方法详解
2020/09/13 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
vue-cli2与vue-cli3在一台电脑共存的实现方法
2019/09/25 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Django中URLconf和include()的协同工作方法
2015/07/20 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
详解Python进程间通信之命名管道
2017/08/28 Python
Python实现输出程序执行进度百分比的方法
2017/09/16 Python
python深度优先搜索和广度优先搜索
2018/02/07 Python
python 利用栈和队列模拟递归的过程
2018/05/29 Python
python3 flask实现文件上传功能
2020/03/20 Python
selenium+python环境配置教程详解
2019/05/28 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
基于Python的Jenkins的二次开发操作
2020/05/12 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
用 python 进行微信好友信息分析
2020/11/28 Python
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
为奢侈时尚带来了慈善元素:Olivela
2018/09/29 全球购物
活动总结模板
2014/05/09 职场文书
Python pyecharts绘制条形图详解
2022/04/02 Python
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle