You need to enable JavaScript to run this app. Python计算月度气温均值并联合日值绘图的代码问题排查
优惠活动
大模型
产品
解决方案
定价
更多

Python计算月度气温均值并联合日值绘图的代码问题排查

近十年逐日气温数据的月度均值计算与联合可视化修正指南

核心问题缺陷定位

针对MonthMean函数逻辑存疑、绘图无显示的两个核心问题,对应常见代码缺陷如下:

  • MonthMean函数的逻辑偏差
    • 分组逻辑边界错误:多为手写循环判断月份变化的实现,未严格按「年-月」双维度聚合,遇到闰年2月、跨月数据时容易把相邻月份的逐日气温错归为一组
    • 异常值未过滤:未剔除数据集中的缺失标记值(如-999、空值)直接计算平均,会导致月度结果出现极端偏离
  • 月度序列无显示的绘图bug
    • 坐标系统不匹配:计算完月度值后,x轴要么直接用数组索引、要么固定取每月1日的时间戳和原逐日的datetime类型x轴混用,导致序列点全部落在坐标轴可视范围外
    • 图层遮挡:月度序列的绘图代码写在逐日曲线绘制逻辑之前,低密度的月度点被半透明的逐日曲线完全覆盖,视觉上等同于函数未执行
    • 点位位置错误:未按要求把月度值对应到所属月份的中间位置,直接用月初坐标导致序列和轴刻度重叠,视觉上难以识别

可落地的修正实现

1. 重写无边界错误的MonthMean计算函数

直接依托pandas的聚合能力替代手写循环,从根源避免分组逻辑bug,代码实现如下:

import pandas as pd

def get_monthly_tave(weather_daily_df):
    # 过滤DallasTX数据集中常见的缺失值(如低于-50℃的标记值)
    valid_daily = weather_daily_df[weather_daily_df['Tave'] > -50]
    # 按年、月双维度分组计算Tave均值
    monthly_stats = valid_daily.groupby(
        [valid_daily['date'].dt.year, valid_daily['date'].dt.month]
    )['Tave'].mean().reset_index(names=['year', 'month'])
    # 生成对应月份中间位置的绘图时间戳:每月1号向后推半月时长
    monthly_stats['plot_x'] = pd.to_datetime({
        'year': monthly_stats['year'],
        'month': monthly_stats['month'],
        'day': 1
    }) + pd.to_timedelta(
        monthly_stats['month'].dt.days_in_month // 2,
        unit='d'
    )
    return monthly_stats

2. 绘图逻辑修正

  • 调整绘图顺序:先绘制半透明的逐日Tave曲线(设置alpha=0.3降低视觉权重),再绘制月度均值序列,通过zorder参数把月度序列的图层优先级调高,避免被遮挡
  • 统一x轴数据类型:所有绘图点的x值均使用datetime类型的时间戳,不要混用数值索引和时间对象
  • 月度序列样式设置:用区分度较高的颜色(如深红色)、实心圆点标记展示月度均值,让读者可以直接对应到所属月份

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 16:57:05