resample()

  • resample()进行重采样。

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

降采样

考虑因素:

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

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

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()进行频度转换。
>>> 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

参考地址:

《利用Python进行数据分析》

Pandas —— resample()重采样和asfreq()频度转换相关推荐

  1. Pandas resample重采样及freq用法

    DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='st ...

  2. Pandas — resample()重采样

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

  3. Pandas resample数据重采样

    Pandas resample数据重采样 数据重采样是将时间序列从一个频率转换至另一个频率的过程,它主要有两种实现方式,分别是降采样和升采样,降采样指将高频率的数据转换为低频率,升采样则与其恰好相反, ...

  4. 从pandas resample说起,然后再超越resample,通过pd.Grouper、groupby、agg

    从pandas resample说起,然后再超越resample,通过pd.Grouper.groupby.agg 问题: 注意:如果你想类似按照resample那样,改变时间范围来进行数据处理或者统 ...

  5. python resample函数_Pandas的时间序列-resample重采样

    39. Pandas的时间序列数据-resample重采样 在pandas里对时序的频率的调整称之重新采样,即从一个时频调整为另一个时频的操作,可以借助resample的函数来完成.有upsampli ...

  6. Pandas中的resample重采样函数

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

  7. Pandas的时间序列数据-resample重采样(31)

    在pandas里对时序的频率的调整称之重新采样,即从一个时频调整为另一个时频的操作,可以借助resample的函数来完成.有upsampling和downsampling(高频变低频)两种.resam ...

  8. resample 重采样

    resample采样 统称:重采样 重采样是按照频率划分:降采样 和 升采样 #降采集 import pandas as pddata_index = pd.data_range('20190701' ...

  9. FFmpeg源码分析:resample重采样

    FFmpeg在libswresample模块提供重采样函数.音频重采样过程是先建立原始音频信号,然后重新采样.重采样分为上采样和下采样,其中上采样需要插值,下采样需要抽取.从高采样率到低采样率转换是一 ...

最新文章

  1. GitBook本地的安装与查看
  2. 字符串-最后一个单词的长度(双指针)
  3. 菲尔兹奖得主舒尔茨没做到的事,现在被计算机证明了
  4. 如何修改作者名称_PS2019中如何扩展文本选区 ps扩展文本选区的图文教程_photoshop教程...
  5. MySQL--3--mysqldump备份策略
  6. b+树阶怎么确定_B站公布年度弹幕,这个排名我不太服气
  7. C#Convert.ToInt32(byte)方法-将字节值转换为int
  8. FMI在仿真软件SkyEye中的应用
  9. DAS 2020 Keynote Speech | 深度学习时代的 OCR
  10. oracle异步sql,Linux上Oracle是否使用异步io的诊断
  11. 2013 Multi-University Training Contest 2 Balls Rearrangement
  12. 自定义MVC框架之工具类-图像处理类
  13. 为什么eval某个json字符串时要加括号?
  14. 在茫茫决策树入门帖里,我强推这篇(附可视化图)
  15. 全国土壤湿度数据集/土壤水分数据
  16. Atitit 图片验证码功能设计文档总结目录1.1. 使用图片验证码img src标签设置图片。。验证码图片有png,jpg,svg等格式。。 11.2. Php png图像 11.3. P
  17. 仿新浪微盾客户端项目简介一
  18. 凤凰系统运行linux,凤凰系统率先升级内核到Linux4.9,支持更多新硬件
  19. C语言一行一行读取文件
  20. 滴滴裁员2000人:老板辞退你,从来都不是因为钱

热门文章

  1. 求问大神!类似于TUTK的P2P云平台还有哪些啊?
  2. Docker Overlayfs文件系统联合挂载原理
  3. 这几款好用超赞的 Google Chrome插件送给你!
  4. 使用navicat导入txt数据到数据库
  5. WPF开发学生信息管理系统【WPF+Prism+MAH+WebApi】(完)
  6. 利用EW代理实现内网穿透
  7. linux cpu跑分软件,Geekbench 5 5.2.3 硬件性能跑分工具 特别版
  8. 微信公众号 模板消息
  9. Opencv学习----Opencv宏定义(CV_8U、CV_8S、CV_16U...)
  10. 485通讯的校验和_232/485转CAN 智能协议转换器