Python Pandas resample函数详解:降采样与重采样实战

落日邮差
落日邮差
发布时间:2026-10-13| 3人浏览过
原创

本文详细介绍Python Pandas中resample函数的用法,涵盖降采样与重采样两种场景。通过示例解析rule、closed、label等关键参数对区间划分的影响,并对比asfreq、ffill、bfill三种重采样填充策略,帮助开发者掌握时间序列数据的聚合与插值技巧。

resample函数原型与关键参数

函数原型

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,随后将其聚合为左闭右开的5个区间:[1, 8)、[8, 15)、[15, 22)、[22, 29)以及[29, 5(下个月))。每个区间的值为该区间内单个值的总和。由于29日之后仅有29日和30日有数据,因此最终结果仅包含两个有效值。

接下来分析closed和label参数的功能。


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='left'则表示标签取左区间的值。

重采样:缺失值填充策略

重采样

重采样用于降低时间细粒度,主要涉及缺失值的填充处理。以下是三种常见的填充方法。

不填充。对于无值的位置,使用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

总结

重采样和降采样通常应用于时间序列分析中。合理使用这些方法降低时间维度或细粒度,有助于构建更优质的特征。

以上关于Python中resample函数实现重采样和降采样的内容即为分享的全部信息,希望能对大家有所帮助,也欢迎大家继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。