Pandas按站点名绘制1-12月Var列箱线图触发ValueError的问题
报错原因排查与修正方案
核心触发报错的逻辑错误
- 过滤条件匹配失效:循环虽然通过
enumerate(sitenames,1)解包拿到了字符串型的plant_name值,但完全没有用该值做行筛选,反而拿枚举生成的1-8整数序号i匹配plant_name列存储的字符串型站点名称,筛选结果为空DataFrame。空表调用boxplot()方法时,因没有可绘制的分组数据,自然抛出“值数量不足解包、获取到0个元素”的报错,也是日志里出现0轴空图的直接来源。 - 绘图维度完全错位:你的设计目标是为sitenames里的每个站点单独出图,单图内以1-12月为x轴,展示该站点Var列的月度统计分布,但现有代码的标题、轴标签逻辑完全反向:把月份列表元素当站点图的标题,x轴标签错写为“SITE”,和实际出图逻辑不匹配。
- 冗余绘图步骤:每轮循环先手动执行
plt.figure(),但pandas的.boxplot()方法会自动新建画布,导致每轮循环会额外生成一张完全无内容的空白图。
修正后可实现目标的代码
# 遍历每个站点独立出图 for site in sitenames: # 筛选当前站点对应的所有数据行 site_subset = df3[df3['plant_name'] == site] # 对站点子集绘制箱线图:按month分组,展示Var列分布 ax = site_subset.boxplot( by='month', column='Var', figsize=(10, 6) ) # 调整x轴刻度为定义的月份序列,旋转标签避免文字重叠 ax.set_xticklabels(months, rotation=90, ha='right') # 匹配设置图题、轴标签 plt.suptitle('1991-2020 ERA5 WIND PRODUCTION', y=1.02) plt.title(f'站点:{site}') plt.xlabel('月份') plt.ylabel('VARIABILITY') # 自动调整布局,避免标签被画布边缘截断 plt.tight_layout() plt.show()
运行前校验项
- 确认
df3['month']列的取值为1-12的有序数字,和设置的月份刻度顺序一一对应,避免出现月份顺序错位。 - 确认
df3['plant_name']列的取值和sitenames列表的字符串完全一致,没有大小写差异、前后冗余空格这类隐形的匹配偏差,防止筛选结果为空。
内容的提问来源于stack exchange,提问作者user2100039
相关产品推荐
相关产品推荐

