Python使用Pandas按年重采样DataFrame温度数据绘图异常问题
Pandas按年重采样温度数据报错修复方案
核心报错原因
按年重采样触发异常90%以上是两个问题:
- 存储日期的
dt列没有转换为Pandas支持的datetime64类型,导入csv等格式数据时日期列默认会被识别为字符串类型 - 调用
resample时没有将时间列设为DataFrame索引,也没有在方法中指定时间列参数
可直接运行的修复代码
import pandas as pd import matplotlib.pyplot as plt # --- 数据预处理部分(替换成你自己的数据读取逻辑即可)--- # 假设原始数据读取后存储为df # 1. 强制转换dt列为日期格式,异常日期会被标记为空值 df['dt'] = pd.to_datetime(df['dt'], errors='coerce') # 2. 两种重采样前置方案二选一即可 # 方案A:把dt列设为索引(后续操作更方便,推荐) df_timeindex = df.set_index('dt') # 方案B:不修改索引,后续resample时指定on参数 # --- 重采样计算年平均温度 --- # 用方案A的话直接按索引重采样,注意pandas2.0+年频率用YE(年末)/YS(年初),旧版本用Y yearly_avg_temp = df_timeindex['AverageTemperature'].resample('YE').mean() # 用方案B的话用这行代码 # yearly_avg_temp = df.resample('YE', on='dt')['AverageTemperature'].mean() # --- 可视化绘图 --- plt.figure(figsize=(12, 6)) yearly_avg_temp.plot(linewidth=2, color='#d62728') plt.title('目标城市年平均温度变化趋势', fontsize=14) plt.xlabel('年份', fontsize=12) plt.ylabel('年平均温度(℃)', fontsize=12) plt.grid(alpha=0.3) plt.show()
避坑提示
- 预处理完可以先执行
print(df['dt'].dtype)做校验,输出结果为datetime64[ns]才代表日期格式转换成功- 如果你的pandas版本低于2.0,运行时提示频率别名无效,把代码里的
'YE'替换成'Y'即可- 如果重采样结果里出现空值,可以在
.mean()后面加.dropna()过滤掉无数据的年份
内容的提问来源于stack exchange,提问作者Chase Asbby
相关产品推荐
相关产品推荐

