如何绘制赫尔辛基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
相关产品推荐
相关产品推荐

