python中resample函数实现重采样和降采样代码
作者:sorrythanku 发布时间:2022-10-24 05:49:23
函数原型
resample(self, rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention=‘start', kind=None, loffset=None, limit=None, base=0, on=None, level=None)
比较关键的是rule,closed,label下面会随着两个用法说明
降采样
对时间数据细粒度增大,可以把每天的数据聚合成一周,可以求和或者均值的方式进行聚合
下面给出列子
times=pd.date_range('20180101',periods=30)
ts=pd.Series(np.arange(1,31),index=times)
ts
2018-01-01 1
2018-01-02 2
2018-01-03 3
2018-01-04 4
2018-01-05 5
2018-01-06 6
2018-01-07 7
2018-01-08 8
2018-01-09 9
2018-01-10 10
2018-01-11 11
2018-01-12 12
2018-01-13 13
2018-01-14 14
2018-01-15 15
2018-01-16 16
2018-01-17 17
2018-01-18 18
2018-01-19 19
2018-01-20 20
2018-01-21 21
2018-01-22 22
2018-01-23 23
2018-01-24 24
2018-01-25 25
2018-01-26 26
2018-01-27 27
2018-01-28 28
2018-01-29 29
2018-01-30 30
Freq: D, dtype: int32
ts_7d=ts.resample('7D').sum()
ts_7d
2018-01-01 28
2018-01-08 77
2018-01-15 126
2018-01-22 175
2018-01-29 59
dtype: int32
我们看看上面代码,就是先给出一个1-30号的series,l然后聚合成左闭右开的5个区间[1,8),[8,15),[15,22),[22-29),[29-5(下个月)),每个区间的值就为单个区间值之和。由于29号往后只有29号和30号有值,所以只有两个值
下面我们看看label和closed的功能
ts_7d=ts.resample('7D',closed='right',label='left').sum()
ts_7d
Out[14]:
2017-12-25 1
2018-01-01 35
2018-01-08 84
2018-01-15 133
2018-01-22 182
2018-01-29 30
上面的代码,将closed改为了right,区间就变成了左开右闭,那么如果从区间还是(1,8],1就取不到,所以往前取,就是(25,1],(1,8],(8,15],(15,22],(22,29],(29,5]这6个区间
ts_7d=ts.resample('7D',closed='right',label='right').sum()
ts_7d
Out[15]:
2018-01-01 1
2018-01-08 35
2018-01-15 84
2018-01-22 133
2018-01-29 182
2018-02-05 30
dtype: int32
上面的代码就可以看出label=right就是指label等于右区间的值,如果label=left就是指label等于左区间的值
重采样
降低时间的细粒度,对于重采样,主要是涉及到值的填充。有下面的三种填充方法
不填充。那么对应无值的地方,用NaN代替。对应的方法是asfreq。
用前值填充。用前面的值填充无值的地方。对应的方法是ffill或者pad。
用后值填充。对应的方法是bfill,b代表back。
下面给出代码看一下
ts_7h_asfreq = ts.resample('7H').asfreq()
print(ts_7h_asfreq)
ts_7h_ffill = ts.resample('7H').ffill()
print(ts_7h_ffill)
ts_7h_bfill = ts.resample('7H').bfill()
ts_7h_bfill
2018-01-01 00:00:00 1.0
2018-01-01 07:00:00 NaN
2018-01-01 14:00:00 NaN
2018-01-01 21:00:00 NaN
Freq: 7H, dtype: float64
2018-01-01 00:00:00 1
2018-01-01 07:00:00 1
2018-01-01 14:00:00 1
2018-01-01 21:00:00 1
Freq: 7H, dtype: int32
Out[24]:
2018-01-01 00:00:00 1
2018-01-01 07:00:00 2
2018-01-01 14:00:00 2
2018-01-01 21:00:00 2
Freq: 7H, dtype: int32
总结
重采样和降采样一般用在时间序列里面,合理的使用降低时间维度或者降低时间细粒度多可以成为好的特征。
来源:https://blog.csdn.net/starmoth/article/details/89212122


猜你喜欢
- 在CentOS7下,默认安装的就是python2.7,我现在来教大家如何安装python3:1、首先安装python3.6可能使用的依赖#
- 直接贴代码啦:#coding=utf-8import pandas as pddef arff_to_csv(fpath): #
- 自动上次ymPrompt组件发布,自己就曾发现在IE8下遮罩的半透明滤镜有时无效的问题,后来也有网友提出过这个问题,但自己一直也没有太多关注
- 方法一:进入MYSQL安装目录 打开MYSQL配置文件 my.ini 或 my.cnf查找 max_connections=100 
- 在风起云涌的互联网浪潮中,产品迭代的速度越来越快。随着用户需求的激增,也不断带来了对设计师能力要求的提高。初入交互设计领域几年来,明显发现可
- Django的View一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。响应可以是一张
- 在Python中用matplotlib画图的时候,为了区分曲线的类型,给曲线上面加一些标识或者颜色。以下是颜色和标识的汇总。颜色(color
- 目录前言创建表关系多表数据操作 - 增删改一对多&一对一关系 - 增删改增加数据删除数据修改数据多对多关系 - 增删改增加多对多关系
- 简介:记录一下关于 Python 环境软件包的一些安装步骤1、升级 Python 到 2.7.10( 默认 2.6.6 )shell >
- Vue3 新的发展方向(来源于尤大知乎)Vue 3 将在 2022 年 2 月 7 日 成为新的默认版本基于 Vite 的极速构建工具链&l
- super().__ init__ ()有什么用?super().__init__() 、 super(B,self).__init__()
- 本文实例讲述了js模仿php中strtotime()与date()函数实现方法。分享给大家供大家参考。具体如下:在js中没有像php中str
- <%on error resume nextdim conn,sql,rsset conn=Server.CreateObject(&
- 前言最近在python里面用json读取json文件,可是老是不成功,特此记录一下。预备知识:def load(fp, cls=None,
- 在项目中时间一律显示为2014-10-20 10:22显得很呆板。在微博、QQ空间等网站通常会显示为几秒前,几分钟前,几小时前等容易阅读的时
- scikit-learn是python的第三方机器学习库,里面集成了大量机器学习的常用方法。例如:贝叶斯,svm,knn等。scikit-l
- 今天在网上找到了一个可以动态加载js文件的js加载器,具体代码如下:JsLoader.jsvar MiniSite=new Object()
- 本文实例讲述了php字符串截取函数mb_substr用法。分享给大家供大家参考,具体如下:string mb_substr ( string
- <style> *{position:absolute;} #panel *{border:1px so
- print() 方法用于打印当前窗口的内容,支持部分或者整个网页打印。调用 print() 方法所引发的行为就像用户单击浏览器的打印按钮。通