Python resample():对时间序列进行重采样(附带实例)
在 Pandas 中,对时间序列的频率进行调整称为重采样,即将时间序列从一个频率转换到另一个频率的处理过程。
例如,从每天转换为每 5 天,如下图所示:

图 1 时间频率改变
重采样主要使用 resample() 方法,该方法用于对常规时间序列进行重新采样和频率转换,包括降采样和升采样两种:
resample() 方法的语法格式如下:
【实例】将 1 分钟的时间序列转换为 3 分钟的时间序列。首先创建一个包含 9 个 1 分钟的时间序列,然后使用 resample() 方法转换为 3 分钟的时间序列并进行求和计算,如下图所示。
程序代码如下:
例如,从每天转换为每 5 天,如下图所示:

图 1 时间频率改变
重采样主要使用 resample() 方法,该方法用于对常规时间序列进行重新采样和频率转换,包括降采样和升采样两种:
- 降采样是指周期由高频率转向低频率。例如,将5分钟股票交易数据转换为日交易数据,将按天统计的销售数据转换为按周统计的销售数据等。
- 升采样是指周期由低频率转向高频率,例如,原来是按周统计的数据,现在变成按天统计。
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,起始时区必须与索引所在的时区匹配。参数值介绍如下:
|
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())