0

0

Pandas中怎样实现数据的重采样?

雪夜

雪夜

发布时间:2025-08-01 13:34:01

|

345人浏览过

|

来源于php中文网

原创

pandas中重采样的核心是resample()函数,用于改变时间序列数据的频率。1. 确保数据是时间序列数据,索引为datetimeindex类型;2. 使用resample()方法并传入新的频率规则,如'd'、'w'、'm'等;3. 指定聚合函数如mean()、sum()等计算每个周期内的值;4. 升采样时使用ffill()、bfill()或interpolate()处理缺失值;5. 可通过closed和label参数控制降采样区间闭合方式和标签;6. 处理不规则数据时,可使用asfreq()、reindex()或fillna()方法。

Pandas中怎样实现数据的重采样?

重采样在Pandas中,就是改变时间序列数据的频率。可以升采样(增加频率,比如从月到天)或者降采样(降低频率,比如从天到月)。核心是

resample()
函数。

Pandas中怎样实现数据的重采样?

解决方案

Pandas的

resample()
函数提供了一种灵活的方式来改变时间序列数据的频率。它结合了分组和聚合的功能,使得时间序列数据的处理变得非常方便。以下是使用
resample()
的基本步骤和一些常见用例:

  1. 确保数据是时间序列数据:首先,确保你的Pandas DataFrame的索引是DatetimeIndex类型。如果不是,可以使用

    pd.to_datetime()
    函数转换。

    Pandas中怎样实现数据的重采样?
    import pandas as pd
    import numpy as np
    
    # 创建一个示例DataFrame
    dates = pd.date_range('2023-01-01', periods=100, freq='D')
    data = np.random.randn(100)
    df = pd.DataFrame({'value': data}, index=dates)
    
    # 确保索引是DatetimeIndex
    # df.index = pd.to_datetime(df.index) # 如果需要转换
  2. 使用

    resample()
    方法:在DataFrame上调用
    resample()
    方法,并传入新的频率规则。频率规则可以是字符串,如'D'(天)、'W'(周)、'M'(月)、'Q'(季度)、'Y'(年)等。

    # 降采样到每周,计算均值
    weekly_mean = df.resample('W').mean()
    print(weekly_mean.head())
    
    # 升采样到每小时,用前一个值填充缺失值
    hourly_filled = df.resample('H').ffill()
    print(hourly_filled.head())
  3. 指定聚合函数

    resample()
    方法返回一个Resampler对象,你需要指定一个聚合函数来计算每个重采样周期内的值。常见的聚合函数包括
    mean()
    sum()
    count()
    min()
    max()
    等。

    Pandas中怎样实现数据的重采样?
    # 降采样到每月,计算总和
    monthly_sum = df.resample('M').sum()
    print(monthly_sum.head())
  4. 处理缺失值:升采样会引入缺失值。可以使用

    ffill()
    (前向填充)、
    bfill()
    (后向填充)或
    interpolate()
    (插值)等方法填充缺失值。

    # 升采样到每小时,并使用线性插值填充缺失值
    hourly_interpolated = df.resample('H').interpolate()
    print(hourly_interpolated.head())
  5. 自定义聚合函数:你还可以使用

    agg()
    方法应用自定义的聚合函数。

    # 自定义聚合函数,计算每个月的范围(最大值 - 最小值)
    def range_func(x):
        return x.max() - x.min()
    
    monthly_range = df.resample('M').agg(range_func)
    print(monthly_range.head())

降采样时,
closed
label
参数有什么作用?

closed
label
参数在降采样中控制着区间的闭合方式和标签。
closed
参数决定区间的哪一端是闭合的(包含),可以是
'right'
(默认)或
'left'
label
参数决定使用区间的哪一端作为标签,也可以是
'right'
(默认)或
'left'
。这俩参数直接影响你如何解读重采样后的时间点。

多奥淘宝客程序API免费版 F8.0
多奥淘宝客程序API免费版 F8.0

多奥淘宝客程序免费版拥有淘宝客站点的基本功能,手动更新少,管理简单等优点,适合刚接触网站的淘客们,或者是兼职做淘客们。同样拥有VIP版的模板引擎技 术、强大的文件缓存机制,但没有VIP版的伪原创跟自定义URL等多项创新的搜索引擎优化技术,除此之外也是一款高效的API数据系统实现无人值守全自动 化运行的淘宝客网站程序。4月3日淘宝联盟重新开放淘宝API申请,新用户也可使用了

下载

举个例子,假设你按天降采样到周,

closed='right'
label='right'
意味着每周日作为该周的标签,并且周日属于该周。如果
closed='left'
label='left'
,则每周一作为该周的标签,且周一属于该周。

# 降采样到每周,指定闭合区间和标签
weekly_sum_right = df.resample('W', closed='right', label='right').sum()
weekly_sum_left = df.resample('W', closed='left', label='left').sum()

print("Right closed and labeled:\n", weekly_sum_right.head())
print("\nLeft closed and labeled:\n", weekly_sum_left.head())

升采样时,如何避免引入过多的缺失值?

升采样必然会引入缺失值,但可以通过选择合适的填充方法来减少其影响。

ffill()
bfill()
适用于数据变化不大的情况,而
interpolate()
则更适用于数据具有一定趋势性的情况。

除了选择合适的填充方法,还可以考虑使用更短的重采样频率,例如,如果你的数据是按天记录的,可以先升采样到小时,然后再进行插值,这样可以减少插值的误差。

另外,了解你的数据特性非常重要。例如,如果你的数据是季节性的,可以考虑使用季节性分解方法,然后对分解后的数据进行重采样和插值。

# 升采样到每小时,并使用时间加权插值填充缺失值
hourly_time_based = df.resample('H').interpolate(method='time')
print(hourly_time_based.head())

如何处理不规则的时间序列数据?

真实世界的数据往往是不规则的,例如,某些日期可能缺少数据,或者数据的时间间隔不一致。Pandas提供了一些方法来处理这些情况。

首先,可以使用

asfreq()
方法将不规则的时间序列转换为规则的时间序列。这个方法允许你指定一个频率,并自动填充缺失的日期。

其次,可以使用

reindex()
方法手动指定新的索引。这对于需要将数据与其他数据集对齐的情况非常有用。

此外,还可以使用

fillna()
方法填充缺失值。这个方法提供了多种填充策略,例如,使用常数填充、使用均值填充等。

# 创建一个不规则的时间序列
irregular_dates = pd.to_datetime(['2023-01-01', '2023-01-03', '2023-01-05', '2023-01-08'])
irregular_data = np.random.randn(4)
irregular_df = pd.DataFrame({'value': irregular_data}, index=irregular_dates)

# 转换为规则的时间序列,并填充缺失值
regular_df = irregular_df.asfreq('D', fill_value=0)
print(regular_df)

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

51

2025.12.04

counta和count的区别
counta和count的区别

Count函数用于计算指定范围内数字的个数,而CountA函数用于计算指定范围内非空单元格的个数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.11.20

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

254

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

206

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1463

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

617

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

548

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

543

2024.04.29

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

36

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 3.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号