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实现忽略大小写对字符串列表排序的方法
Sep 25 Python
Python语言实现机器学习的K-近邻算法
Jun 11 Python
python修改字典内key对应值的方法
Jul 11 Python
Python分析学校四六级过关情况
Nov 22 Python
Django使用Mysql数据库已经存在的数据表方法
May 27 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
分析经典Python开发工程师面试题
Apr 08 Python
Anaconda+VSCode配置tensorflow开发环境的教程详解
Mar 30 Python
Django使用Profile扩展User模块方式
May 14 Python
pycharm实现print输出保存到txt文件
Jun 01 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
python绘制分布折线图的示例
Sep 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中使用in_array() foreach array_search() 查找数组是否包含时的性能对比
2015/04/14 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
基于jQuery的图片剪切插件
2011/08/03 Javascript
javascript中为某个元素指定事件的三种方式
2014/08/07 Javascript
JavaScript实现防止网页被嵌入Frame框架的代码分享
2014/12/29 Javascript
JavaScript插件化开发教程 (三)
2015/01/27 Javascript
JavaScript通过字符串调用函数的实现方法
2015/03/18 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
jQuery事件绑定方法学习总结(推荐)
2016/11/21 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
nodejs初始化init的示例代码
2018/10/10 NodeJs
Nuxt.js实战和配置详解
2019/08/05 Javascript
Vue项目中使用jsonp抓取跨域数据的方法
2019/11/10 Javascript
[02:22]《新闻直播间》2017年08月14日
2017/08/15 DOTA
python调用shell的方法
2013/11/20 Python
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
完美解决python遍历删除字典里值为空的元素报错问题
2016/09/11 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
Python 绘制可视化折线图
2020/07/22 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
Canvas与Image互相转换示例代码
2013/08/09 HTML / CSS
2014年教师党员公开承诺书
2014/05/28 职场文书
小学英语教师先进事迹
2014/05/28 职场文书
幸福中国演讲稿
2014/09/12 职场文书
2016公司年会主持词
2015/07/01 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书
Python的三个重要函数详解
2022/01/18 Python