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()函数的使用,可以大大提高处理时间序列数据的效率和灵活性。


