You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用pandas计算CSV文件中每日对应的过去两周平均气温

实现步骤及代码

核心逻辑:因为你有多个气象站点的数据,必须按站点分组后单独计算每个站点的滑动平均,不能跨站点混合计算,同时要先处理异常值和日期格式,保证时间顺序正确。

步骤1:导入依赖并预处理数据

首先处理Tavg列的'M'缺失标记,转成数值类型,同时把日期列转成pandas可识别的日期格式,按站点+日期升序排序,保证滑动窗口的时间顺序正确。

import pandas as pd

# 读取CSV文件
df = pd.read_csv('你的气温文件路径.csv')

# 处理Tavg列的'M'缺失值,转成浮点型,无法转换的异常值存为NaN
df['Tavg'] = pd.to_numeric(df['Tavg'], errors='coerce')

# 转换日期列为datetime类型
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y')

# 按站点、日期升序排序,保证时间序列顺序正确
df = df.sort_values(by=['Station', 'Date'], ignore_index=True)

步骤2:分组计算14天滑动平均

对每个站点单独开滑动窗口,窗口大小设为14天,计算Tavg的均值,结果存为新列Tavg_14d_rolling。可根据需求调整参数:

  • window=14:窗口大小为14天,对应过去两周
  • min_periods=1:如果窗口内有效数据不足14天(比如序列最开头的几天),有多少条就用多少条计算均值;不需要保留不足14天的结果可以删除这个参数,默认和window大小一致,不足的位置返回NaN
  • closed='right':包含窗口的右端点也就是当日,符合“截至当日的过去两周”的统计逻辑
# 按站点分组后计算滑动平均
df['Tavg_14d_rolling'] = df.groupby('Station')['Tavg'].rolling(
    window=14,
    min_periods=1,
    closed='right'
).mean().reset_index(drop=True)

可选优化:按时间间隔做窗口(更准确)

如果你的数据存在日期缺失(比如某站点某天没有上报数据),用行数计算的窗口会不准,这时可以把日期设为索引,用时间间隔做窗口,哪怕中间缺数据也会严格统计过去14天内的所有有效数据:

# 把日期设为索引
df = df.set_index('Date')

# 用14天时间间隔做窗口
df['Tavg_14d_rolling'] = df.groupby('Station')['Tavg'].rolling(
    window='14D',
    min_periods=1,
    closed='right'
).mean().reset_index(drop=True)

# 恢复原结构,把日期从索引转回列
df = df.reset_index()

处理完成后如果需要保存结果,调用df.to_csv('处理后的气温文件.csv', index=False)即可。

内容的提问来源于stack exchange,提问作者Pythonista0801

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 15:06:05