Python的resample()函数详解

resample()函数是Pandas库中用于时间序列数据处理的强大工具。它允许我们将时间序列数据重新采样到不同的频率,如从分钟级数据重新采样到小时级数据,或者从日级数据重新采样到月级数据。本文将详细介绍 resample()函数的使用方法、常见应用场景及其配置选项。

一、resample()函数的基本用法

resample()函数通常与时间序列数据结合使用。时间序列数据通常是具有时间索引的Pandas DataFrame或Series。

基本语法

DataFrame.resample(rule, how=None, axis=0, fill_method=None, closed=None, label=None, convention='start', kind=None, loffset=None, base=0, on=None, level=None)

二、关键参数介绍

  • rule:定义新的采样频率。例如,'D'表示按天采样,'M'表示按月采样。
  • how:指定聚合函数,如 'mean'、'sum'等。Pandas的新版API中已经将这个参数弃用,改用 .resample().method()的链式调用。
  • axis:要重新采样的轴,默认是0。
  • fill_method:重新采样后缺失值的填充方法,如 'ffill'(前向填充)或 'bfill'(后向填充)。
  • closed:在何处闭合新的区间,'right'或 'left'。
  • label:设置标签放置的位置,'right'或 'left'。
  • convention:如何处理起始边界,默认是 'start'。
  • loffset:设置重新采样后索引的偏移量。
  • on:指定用作重采样时间戳的列。
  • level:在多层索引的情况下,指定用于重采样的级别。

三、常见使用场景

1. 按天重新采样

假设我们有一个包含分钟级别数据的时间序列,想将其重新采样到每天:

import pandas as pd

# 创建示例时间序列数据
date_rng = pd.date_range(start='2023-01-01', end='2023-01-10', freq='T')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = pd.np.random.randint(0, 100, size=(len(date_rng)))

df.set_index('date', inplace=True)

# 按天重新采样并计算平均值
daily_df = df.resample('D').mean()
print(daily_df.head())

2. 按月重新采样

如果我们有日级别数据,希望按月重新采样并计算总和:

# 按月重新采样并计算总和
monthly_df = df.resample('M').sum()
print(monthly_df.head())

3. 填充缺失值

重新采样时可能会出现缺失值,我们可以使用 fill_method参数填充这些值:

# 前向填充
filled_df = df.resample('D').ffill()
print(filled_df.head())

4. 自定义聚合函数

我们可以使用 apply()方法自定义聚合函数:

# 自定义聚合函数
custom_agg = df.resample('D').apply(lambda x: x.max() - x.min())
print(custom_agg.head())

四、resample()函数的高级用法

1. 使用不同的闭合区间

# 使用右闭区间
right_closed_df = df.resample('D', closed='right').mean()
print(right_closed_df.head())

2. 使用标签

# 标签在右侧
right_labeled_df = df.resample('D', label='right').mean()
print(right_labeled_df.head())

3. 偏移量

# 使用偏移量
offset_df = df.resample('D', loffset='1H').mean()
print(offset_df.head())

分析说明表

参数 说明 示例
rule 定义新的采样频率 'D'、'M'、'H'
how (已弃用) 聚合函数 'mean'、'sum'
axis 要重新采样的轴 0 或 1
fill_method 填充方法 'ffill'、'bfill'
closed 闭合区间 'right'、'left'
label 标签位置 'right'、'left'
convention 起始边界处理方式 'start'、'end'
loffset 索引偏移量 '1H'
on 用作重采样时间戳的列 列名
level 多层索引中用于重采样的级别 索引级别

总结

resample()函数是Pandas中处理时间序列数据的关键工具,通过灵活的参数配置,可以满足各种复杂的时间序列分析需求。无论是基础的按天、按月重新采样,还是高级的自定义聚合和填充缺失值,resample()函数都提供了强大的支持。掌握 resample()函数的使用,可以大大提高处理时间序列数据的效率和灵活性。