Pandas —— resample()重采样和asfreq()频度转换

一、resample

  • resample()进行重采样。

  • 重采样(Resampling)指的是把时间序列的频度变为另一个频度的过程。把高频度的数据变为低频度叫做降采样(downsampling),把低频度变为高频度叫做升采样(upsampling)

resample参数如下:

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

降采样

考虑因素:

  • 各区间哪边是闭合的(参数:closed)

  • 如何标记各聚合面元,用区间的开头还是末尾(参数:label)

freq取值如下:

                           

In [232]: ts_index = pd.date_range('2018-08-03',periods =12,freq = 'T')In [233]: ts = pd.Series(np.arange(12),index = ts_index)In [234]: ts
Out[234]:
2018-08-03 00:00:00     0
2018-08-03 00:01:00     1
2018-08-03 00:02:00     2
2018-08-03 00:03:00     3
2018-08-03 00:04:00     4
2018-08-03 00:05:00     5
2018-08-03 00:06:00     6
2018-08-03 00:07:00     7
2018-08-03 00:08:00     8
2018-08-03 00:09:00     9
2018-08-03 00:10:00    10
2018-08-03 00:11:00    11
Freq: T, dtype: int32

默认使用左标签(label=‘left’),左闭合(closed='left’)

此时第一个区间为:2018-08-03 00:00:00~2018-08-03 00:04:59,故sum为10,label为:2018-08-03 00:00:00

In [235]: ts.resample('5min').sum()
Out[235]:
2018-08-03 00:00:00    10
2018-08-03 00:05:00    35
2018-08-03 00:10:00    21
Freq: 5T, dtype: int32

可以指定为右闭合(closed='right’),默认使用左标签(label=‘left’)

此时第一个区间为:2018-08-02 23:55:01~2018-08-03 00:00:00,故sum为0,label为:2018-08-02 23:55:00

In [236]: ts.resample('5min',closed='right').sum()
Out[236]:
2018-08-02 23:55:00     0
2018-08-03 00:00:00    15
2018-08-03 00:05:00    40
2018-08-03 00:10:00    11
Freq: 5T, dtype: int32

可以指定为右闭合(closed='right’),右标签(label=‘right’)

此时第一个区间为:2018-08-02 23:55:01~2018-08-03 00:00:00,故sum为0,label为:2018-08-03 00:00:00

In [237]: ts.resample('5min',closed='right',label='right').sum()
Out[237]:
2018-08-03 00:00:00     0
2018-08-03 00:05:00    15
2018-08-03 00:10:00    40
2018-08-03 00:15:00    11
Freq: 5T, dtype: int32

升采样

考虑因素:

  • 没有聚合,但是需要填充
In [244]: frame = pd.DataFrame(np.random.randn(2, 4),...:                      index=pd.date_range('1/1/2000', periods=2,...:                                          freq='W-WED'),  # freq='W-WED'表示每周三...:                      columns=['Colorado', 'Texas', 'New York', 'Ohio'])In [245]: frame
Out[245]:Colorado     Texas  New York      Ohio
2000-01-05  1.201713  0.029819 -1.366082 -1.325252
2000-01-12 -0.711291 -1.070133  1.469272  0.809806

当我们对这个数据进行聚合的的时候,每个组只有一个值,以及gap(间隔)之间的缺失值。在不使用任何聚合函数的情况下,我们使用asfreq方法将其转换为高频度:

In [246]: df_daily = frame.resample('D').asfreq()In [247]: df_daily
Out[247]:Colorado     Texas  New York      Ohio
2000-01-05  1.201713  0.029819 -1.366082 -1.325252
2000-01-06       NaN       NaN       NaN       NaN
2000-01-07       NaN       NaN       NaN       NaN
2000-01-08       NaN       NaN       NaN       NaN
2000-01-09       NaN       NaN       NaN       NaN
2000-01-10       NaN       NaN       NaN       NaN
2000-01-11       NaN       NaN       NaN       NaN
2000-01-12 -0.711291 -1.070133  1.469272  0.809806

使用ffill()进行前向填充

In [248]: frame.resample('D').ffill()
Out[248]:Colorado     Texas  New York      Ohio
2000-01-05  1.201713  0.029819 -1.366082 -1.325252
2000-01-06  1.201713  0.029819 -1.366082 -1.325252
2000-01-07  1.201713  0.029819 -1.366082 -1.325252
2000-01-08  1.201713  0.029819 -1.366082 -1.325252
2000-01-09  1.201713  0.029819 -1.366082 -1.325252
2000-01-10  1.201713  0.029819 -1.366082 -1.325252
2000-01-11  1.201713  0.029819 -1.366082 -1.325252
2000-01-12 -0.711291 -1.070133  1.469272  0.809806In [249]: frame.resample('D').ffill(limit=2)
Out[249]:Colorado     Texas  New York      Ohio
2000-01-05  1.201713  0.029819 -1.366082 -1.325252
2000-01-06  1.201713  0.029819 -1.366082 -1.325252
2000-01-07  1.201713  0.029819 -1.366082 -1.325252
2000-01-08       NaN       NaN       NaN       NaN
2000-01-09       NaN       NaN       NaN       NaN
2000-01-10       NaN       NaN       NaN       NaN
2000-01-11       NaN       NaN       NaN       NaN
2000-01-12 -0.711291 -1.070133  1.469272  0.809806

新的日期索引没必要跟旧的重叠

In [250]: frame.resample('W-THU').ffill()
Out[250]:Colorado     Texas  New York      Ohio
2000-01-06  1.201713  0.029819 -1.366082 -1.325252
2000-01-13 -0.711291 -1.070133  1.469272  0.809806

分组重采样

In [279]: times = pd.date_range('2018-08-3 00:00', freq='1min', periods=10)In [280]: df2 = pd.DataFrame({'time': times.repeat(3),...:                     'key': np.tile(['a', 'b', 'c'], 10),...:                     'value': np.arange(30)})In [281]: df2[:5]
Out[281]:key                time  value
0    a 2018-08-03 00:00:00      0
1    b 2018-08-03 00:00:00      1
2    c 2018-08-03 00:00:00      2
3    a 2018-08-03 00:01:00      3
4    b 2018-08-03 00:01:00      4In [282]: df2.groupby(['key',pd.Grouper(key='time',freq='5min')]).sum()
Out[282]:value
key time
a   2018-08-03 00:00:00     302018-08-03 00:05:00    105
b   2018-08-03 00:00:00     352018-08-03 00:05:00    110
c   2018-08-03 00:00:00     402018-08-03 00:05:00    115

asfreq()

  • asfreq()进行频度转换。
  • 当您要将DatetimeIndex更改为具有不同的频率同时在当前索引处保留相同的值时,可以使用asfreq.
  • asfreq() : 采样时间点的value
  • resample() : 采样时间段内value

 

                       

ts如上图:

ts.asfreq('D').sum()
-1.0655834142614131

 

ts.resample('D').sum()

 

-2.494026

 

  • 缺失值的填充方式.

  • method : {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}
>>> index = pd.date_range('1/1/2000', periods=4, freq='T')
>>> series = pd.Series([0.0, None, 2.0, 3.0], index=index)
>>> df = pd.DataFrame({'s':series})
>>> dfs
2000-01-01 00:00:00    0.0
2000-01-01 00:01:00    NaN
2000-01-01 00:02:00    2.0
2000-01-01 00:03:00    3.0

将频度转换为30s

>>> df.asfreq(freq='30S')s
2000-01-01 00:00:00    0.0
2000-01-01 00:00:30    NaN
2000-01-01 00:01:00    NaN
2000-01-01 00:01:30    NaN
2000-01-01 00:02:00    2.0
2000-01-01 00:02:30    NaN
2000-01-01 00:03:00    3.0

将频度转换为2min,不会进行重采样(与resample的不同之处)

>>> df.asfreq(freq='2min')s
2000-01-01 00:00:00    0.0
2000-01-01 00:02:00    2.0

使用bfill()进行后向填充

>>> df.asfreq(freq='30S').bfill()s
2000-01-01 00:00:00    0.0
2000-01-01 00:00:30    NaN
2000-01-01 00:01:00    NaN
2000-01-01 00:01:30    2.0
2000-01-01 00:02:00    2.0
2000-01-01 00:02:30    3.0
2000-01-01 00:03:00    3.0
补充:day3Ts.resample('D').interpolate('linear') # 线性插值

--------------------------------------------------------------------------------------------------------- 

                                                                                                原文:https://blog.csdn.net/starter_____/article/details/81437626 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/35858.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

玩转MySQL(4)---多表关联

一、首先,我们可以查看数据库的各种变量: 1.SHOW VARIABLES 查看数据库的变量 2.查看当前数据库的编码 SHOW VARIABLES WHERE variable_name LIKE character%; 3.解决中文乱码,如下三个编码保持一致就可以。 character_set_client、charac…

adb连接木木模拟器

木木模拟器调试到开发模式,在一般在\Nemu\vmonitor\bin中,运行命令行adb connect 127.0.0.1:7555

玩转MySQL -----处理大数据对象

一、大数据对象简介 1.LOB(Large Object,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活&am…

http 转 https 操作步骤

http 转https 花了很多的时间,走了很多的网弯路,最后还是弄好了 步骤: 第一步: 进入阿里云账号,进入 控制台 -》 安全(云盾) -》 CA证书服务 -》 购买证书 -》 注意:这里选项的时候…

python数据类型转换

Python数据类型转换 Python数据类型之间的转换 函数描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 float(x) 将x转换到一个浮点数 complex(real [,imag]) 创建一个复数 str(x) 将对象 x 转换为字符串 repr(x) 将对象 x 转换为表达式…

搭建frida+木木模拟器运行环境

目录 pip安装frida安装木木模拟器开启模拟器的root权限打开模拟器USB调试安装RE文件管理器 下载frida服务端-Android下载frida-server文件移动文件到tmp下 使用adb连接mumu模拟器设置frida-server权限并启动查看是否启动成功 使用python调用 pip安装frida 本机环境win10 (AMD6…

利用ChatGPT 5分钟制作一份思维导图

一、利用ChatGPT列出思维导图大纲 二、利用ChatGPT继续将大纲转化为markdown语法 三、将上面内容复制到txt文档中保存 四、修改文件名后缀为md 五、将生成的md文件导入到xmind中 打开xmind软件,通过「文件→导入→markdown」,选择我们刚刚创建的文件导入…

音视频技术开发周刊 | 302

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 ChatGPT神器Code Interpreter终于开放,到底怎么用?这里有一份保姆级教程 Code Interpreter 已经正式开放。 上海世界AI大会:MidJourney…

Window之系统开机Administrator账户被停用

在我们的Win7系统开机时如果没有设置其他账户,并且我们的Administrator账户被停用怎么进入Win7系统呢? 解决方法: 重启电脑后按F8进入安全模式, 右键点击“我的电脑” -- “管理” -- “本地用户和组” -- “用户” -- 右键“Ad…

Spug“账户已被系统禁用”的解决办法

前置文章: Spug发布前端项目实战全过程https://blog.csdn.net/wdy_2099/article/details/120215392 Spug设置报警提醒功能(钉钉、微信、邮箱)落地详细https://blog.csdn.net/wdy_2099/article/details/120224867 问题:未知原因导…

桌面计算机安全禁用账户,Win10电脑提示“你的账户已被停用,请向系统管理员咨询”的解决教程...

有用户在安装 解决方法一: 1、此情况可以长按电源键强制关机再开机看到WIN10登陆界面时再次长按电源键强制关机,如此三次后再开机会看到“查看高级修复选项”的按钮,点此按钮会进入WINRE环境,选择“疑难解答”; 2、选择“高级选项”; 3、选择…

【转】您的账户已被停用,请向系统管理员咨询解决办法

升级win10后发现开机时进入安全模式长按F8已经没用了,其实win10中把安全模式放入了系统修复模块,下面就来介绍下win10如何进入安全模式。 进入下边这个界面可通过按住 SHIFT 点击重启即可 工具/原料 win10 方法/步骤 打开“开始”菜单,找到里…

您的账户已被停用,请向系统管理员咨询 解决方案(亲测有效)

当你的电脑误操作了以下步骤,或者被篡改了设置了这里 那恭喜你,重启后就登不上Administrator账户了 首先看一下网上的三种无效方式 无效方式一:安全模式进入用户和组 一般两种方式进入安全模式: 方式一:F8进入 方式二:按住shift 重启 (1)选中其中的安全模式,在安全…

国庆节文字摘抄好词好句好段怎么写?用便签记录就可以

一般来说,在国庆节有不少学生都有一项这样的作业,这就是写国庆节文字摘抄,例如一些关于国庆节的好词好句好段,这不仅可以帮助我们积累一些知识,也可以让我们在以后的日常生活、写作文中使用到。那么国庆节文字照抄怎么…

我一直都以为摘录好词好句是一个好…

我一直都以为摘录好词好句是一个好习惯,以前我看到一些好词好句我就会把它们抄写到笔记本上,把它们背熟,然后到了写文章时就滴字不漏地照搬进去。直到现在我才明白,原来这是一个坏习惯,说是摘录,其实是抄袭…

关注CSDN社区微信,更多精彩等你来

CSDN社区微信公众号“程序人生”(微信ID:coder_life)来了,每天我们会将CSDN社区中大量的优质内容浓缩成1~3篇文章,推送到您的手机中,让您无论何时何地都能感受到知识的精彩、技术的力量。 扫描二维码关注&a…

常用值得收藏的网站/软件 持续更新中

学识决定眼界,眼界决定格局,格局决定人生。 文章目录 一、查询与资源类二、教育与学习类三、代码与资源类四、办工类五、技术与知识面类六、交流与分享类七、其他 这些年经常用的网站,觉得非常实用。与大家分享分享,独乐乐不如众乐…

1.Postman之发送get请求

Postman之发送get请求 1.创建一个集合 2.在集合中创建一个请求 3.GET请求获取北京今天天气: (1)天气API接口文档:http://doc.tianqiapi.com/603579 (2)请求API接口:http://www.tianqiapi.co…

关于PostMan发送请求获得响应

关于PostMan发送请求 在PostMan里面设置引用全局变量(环境变量和集合变量不常用) 附上官网变量设置:https://learning.postman.com/docs/writing-scripts/script-references/postman-sandbox-api-reference/#writing-test-assertions 1、点…