首页 > 编程笔记 > Python笔记 阅读:2

Python resample():对时间序列进行重采样(附带实例)

在 Pandas 中,对时间序列的频率进行调整称为重采样,即将时间序列从一个频率转换到另一个频率的处理过程。

例如,从每天转换为每 5 天,如下图所示:


图 1 时间频率改变

重采样主要使用 resample() 方法,该方法用于对常规时间序列进行重新采样和频率转换,包括降采样和升采样两种:
resample() 方法的语法格式如下:
Series.resample(rule, closed=None, label=None, convention='start', kind=None, on=None, level=None, origin='start_day', offset=None, group_keys=False)
参数说明见下表:

参数名称 描述
rule 字符串,表示目标时间序列或对象转换。
closed 降采样时的时间区间,其值为“right”或“left”,“right”表示左开右闭(即左边值不包括在内),“left”表示左闭右开(即右边值不包括在内),默认值为 None。
label 指明降采样时如何设置聚合值的标签,例如 10:30-10:35 会被标记成 10:30 还是 10:35,默认值为 None。
convention 重采样时,将低频率转换到高频率时所采用的约定,其值为“start”或“end”,默认值为“start”。
kind 聚合到时期(period)或时间戳(timestamp),默认聚合到时间序列的索引类型,默认值为 None。
on 字符串,可选参数,默认值为 None。对DataFrame 对象使用列代替索引进行重采样。列必须与日期时间类似。
level 字符串或整型,可选参数,默认值为 None。用于多索引,表示重采样的级别名称或级别编号,级别必须与日期时间类似。
origin 要调整分组的时间戳,默认值为 start_day,起始时区必须与索引所在的时区匹配。参数值介绍如下:
  • epoch:原点是 1970-01-01。
  • start:时间序列的第一个值。
  • start_day:原点是时间序列第一天的午夜。
  • end:时间序列的最后一个值。
  • end_day:原点是时间序列最后一天的午夜。
offset 聚合标签的时间校正值,默认值为 None。例如,“-1s”或“Second(-1)”用于将聚合标签调早 1 秒。
group_keys 布尔值,默认值为 False,指明当对重采样的对象使用 apply 方法时,结果索引中是否包含组键。
返回值 重采样对象。

DataFrame 对象也有 resample() 方法,用法与 Series 对象的 resample() 方法一样。


【实例】将 1 分钟的时间序列转换为 3 分钟的时间序列。首先创建一个包含 9 个 1 分钟的时间序列,然后使用 resample() 方法转换为 3 分钟的时间序列并进行求和计算,如下图所示。


程序代码如下:
# 导入pandas模块
import pandas as pd

# 生成时间
index = pd.date_range(start='02/02/2024', periods=9, freq='T')

# 创建时间数据
series = pd.Series(range(9), index=index)
print(series)

# 转换为3分钟的时间序列并进行求和计算
print(series.resample('3T').sum())

相关文章