重采样前必须确保索引为datetimeindex,否则报错;freq参数需明确时区与边界(如'ms'非'm');聚合方法应依业务选mean/first/sum;升采样须指定fill_method;时间对齐逻辑须先明确业务定义。

重采样前必须确保索引是DatetimeIndex
如果 df.index 不是时间类型,resample() 会直接报错 TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex。常见错误是读取 CSV 后没设索引或没转换类型:
- 用
pd.read_csv(..., parse_dates=['date'], index_col='date')一步到位 - 已有列但未设索引:先
df['date'] = pd.to_datetime(df['date']),再df = df.set_index('date') - 已设索引但类型不对:检查
type(df.index),若不是DatetimeIndex,强制转换df.index = pd.DatetimeIndex(df.index)
resample() 的 freq 参数不能只写 'M' 或 'D'
freq 必须明确时区语义和边界行为,比如 'M' 默认指“月末”,而 'MS' 才是“月初”。写错会导致数据截断或对齐偏移:
Python 3.14.2是Python编程语言在2025年12月5日发布的稳定版本,属于3.14系列的第二个维护更新。该版本包含了18项修复,重点解决了多进程、数据类及正则表达式等模块的回归问题,并修复了CVE-2025-12084等安全漏洞。此版本标志着自由线程模式(移除GIL)正式获得官方支持,是Python发展的重要里程碑。
- 月度汇总常用
'MS'(Month Start)或'M'(Month End),别混用 - 小时级下采样写
'2H',不是'2h'(大小写敏感) - 周频推荐用
'W-MON'明确起始日,避免默认'W-SUN'导致周一数据被归到上周 - 遇到
ValueError: Invalid frequency,查 pandas offset aliases 文档 核对缩写
聚合方式选 mean() 还是 first() 取决于业务含义
重采样本质是分组 + 聚合,不同方法结果差异很大,不能无脑用 mean():
- 温度、股价等连续量适合
mean()或ohlc() - 状态类字段(如设备在线/离线)必须用
first()或last(),否则mean()会返回浮点数,失去语义 - 计数类字段(如请求次数)应先用
sum(),而不是count()—— 后者只统计非空值个数,前者才累加原始数值 - 混合类型 DataFrame 重采样前建议显式指定列和方法:
df.resample('D')[['temp', 'status']].agg({'temp': 'mean', 'status': 'last'})
升采样(upsampling)必须配合 fill_method 或 fill_value
从日频升到小时频(如 'D' → 'H')会产生大量空行,默认全为 NaN,直接绘图或计算会出错:
- 用
ffill()填充前向值(适用于状态保持场景) - 用
bfill()填充后向值(适用于预测回填) - 用
asfreq(fill_value=0)填充固定值(适用于计数清零逻辑) - 注意
resample().ffill()和resample().asfreq().ffill()行为不同:前者只填充组内空隙,后者先扩维再填充,容易多出无效时间点
freq 和 closed/label 参数。Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










