Python中DataFrame按Country、City列重采样绘图报错排查
报错核心原因
- pandas的
resample()是时间序列专属方法,仅支持对时间类型的索引做重采样运算。你已经把dt列处理成了datetime类型,但没有将其设置为DataFrame/Series的索引,直接调用resample()就会触发类型报错。 - 从原有代码逻辑看,是先按
Country、City做了行筛选,直接对筛选结果里的AverageTemperature列调用重采样,跳过了设置时间索引的必要步骤,这是报错的直接诱因。
修正方案
如果已经完成dt列的datetime类型转换,直接按以下逻辑调整即可:
分步写法(逻辑清晰,方便调试)
# 筛选指定国家、城市的子集 city_df = df[(df["Country"] == "你要查询的国家名") & (df["City"] == "你要查询的城市名")].copy() # 将时间列设为索引,这是resample正常运行的必要前提 city_df = city_df.set_index("dt") # 按年维度重采样,聚合方式取平均气温,可根据需求替换为sum、max、min等聚合规则 yearly_avg_temp = city_df["AverageTemperature"].resample("Y").mean() # 绘制趋势图 yearly_avg_temp.plot(figsize=(12, 6), ylabel="Annual Average Temperature")
链式写法(代码简洁,适合快速出结果)
df[ (df["Country"] == "你要查询的国家名") & (df["City"] == "你要查询的城市名") ].set_index("dt")["AverageTemperature"].resample("Y").mean().plot()
补充说明:如果重采样后存在空值,可在
.mean()后追加.dropna()剔除缺失值,避免绘图时线条出现断档。
内容的提问来源于stack exchange,提问作者Chase Asbby
相关产品推荐
相关产品推荐

