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

如何绘制赫尔辛基1960-2020年月平均温度?现有代码问题排查

存在的问题
  • 用pd.read_csv()读取pickle格式文件:wdata.pkl是二进制序列化文件,只能用pickle.load()或者pd.read_pickle()读取,pd.read_csv()是用来解析文本型csv文件的,完全不兼容,这是核心报错原因。
  • 字段名不匹配:你要提取的月均温对应字段是tmon,但代码里写的筛选变量是tday,根本找不到对应字段,自然无法输出平均温度。
  • 逻辑冗余混乱:你已经提前把1960-2020年的逐月观测数据存到了本地pkl文件,后续代码又额外写了拉取逐日数据、合并表格的冗余逻辑,完全没必要,反而增加了报错概率。
  • 字段名大小写不统一:代码里一会儿用Date一会儿用date,很容易触发键不存在的报错。
最简实现方案

直接读取本地pkl文件,解析提取月均温后用pandas+matplotlib绘图即可,示例代码如下:

import pickle
import pandas as pd
import matplotlib.pyplot as plt

# 读取本地保存的逐月数据
with open('wdata.pkl', 'rb') as f:
    monthly_data = pickle.load(f)

processed = []
for month_obs in monthly_data:
    # 提取当月所有站点的有效温度值
    temp_list = []
    month_date = None
    for site, obs in month_obs.items():
        t_val, t_time = obs['tmon']
        # 记录日期(同一月的所有观测日期一致,取第一个即可)
        if not month_date:
            month_date = pd.to_datetime(t_time[:10])
        if t_val != 'NaN':
            temp_list.append(float(t_val))
    # 计算当月所有站点的平均温度
    avg_temp = sum(temp_list)/len(temp_list) if temp_list else None
    processed.append([month_date, avg_temp])

# 转成DataFrame并清洗
df = pd.DataFrame(processed, columns=['日期', '月平均温度(℃)'])
df.dropna(inplace=True)
df.sort_values('日期', inplace=True)

# 绘图
plt.figure(figsize=(18,6))
plt.plot(df['日期'], df['月平均温度(℃)'], linewidth=0.8)
plt.title('1960-2020年赫尔辛基月平均温度变化')
plt.xlabel('年份')
plt.ylabel('温度(℃)')
plt.grid(alpha=0.3)
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:21:00