IndexError异常求助:跑卫雷达图代码索引越界原因排查
问题排查:跑卫雷达图代码的IndexError异常
问题背景
将四分卫雷达图代码修改为跑卫版本后,调用get_rb_data函数时触发IndexError,报错提示index 1 is out of bounds for axis 0 with size 0。已确认原始数据存在索引,但无法定位问题。
相关代码与数据
数据预览
Player Tm Age Pos G GS Att Yds TD 1D Succ% Lng Y/A Y/G Fmb 1 Derrick Henry* TEN 28 RB 16 16 349 1538 13 65 46.7 56 4.4 96.1 6 2 Josh Jacobs*+ LVR 24 RB 17 17 340 1653 12 93 57.4 86 4.9 97.2 3 3 Nick Chubb* CLE 27 RB 17 17 302 1525 12 69 50.0 41 5.0 89.7 1 4 Saquon Barkley* NYG 25 RB 16 16 295 1312 10 62 47.5 68 4.4 82.0 1 5 Najee Harris PIT 24 RB 17 17 272 1034 7 45 46.0 36 3.8 60.8 3
数据索引范围:RangeIndex(start=1, stop=379, step=1)
出错函数与调用代码
def get_rb_data(data, team): return np.asarray(data[data['Tm'] == team])[1] # 图表绘制与数据调用部分 fig = plt.figure(figsize=(8, 8), facecolor='white') ax1 = fig.add_subplot(221, projection='polar', facecolor='#ededed') ax2 = fig.add_subplot(222, projection='polar', facecolor='#ededed') ax3 = fig.add_subplot(223, projection='polar', facecolor='#ededed') ax4 = fig.add_subplot(224, projection='polar', facecolor='#ededed') plt.subplots_adjust(hspace=0.8, wspace=0.5) sf_data = get_rb_data(data_radar_filtered, 'SFO') sea_data = get_rb_data(data_radar_filtered, 'SEA') ari_data = get_rb_data(data_radar_filtered, 'ARI') lar_data = get_rb_data(data_radar_filtered, 'LAR') ax1 = create_radar_chart(ax1, angles, lar_data, team_colors['LAR']) ax2 = create_radar_chart(ax2, angles, ari_data, team_colors['ARI']) ax3 = create_radar_chart(ax3, angles, sea_data, team_colors['SEA']) ax4 = create_radar_chart(ax4, angles, sf_data, team_colors['SFO']) plt.show()
报错信息
IndexError Traceback (most recent call last) Cell In[142], line 10 8 plt.subplots_adjust(hspace=0.8, wspace=0.5) 9 # Get RB data ---> 10 sf_data = get_rb_data(data_radar_filtered, 'SFO') 11 sea_data = get_rb_data(data_radar_filtered, 'SEA') 12 ari_data = get_rb_data(data_radar_filtered, 'ARI') Cell In[139], line 2, in get_rb_data(data, team) 1 def get_rb_data(data, team): ----> 2 return np.asarray(data[data['Tm'] == team])[1] IndexError: index 1 is out of bounds for axis 0 with size 0
问题原因
- 核心触发点:筛选结果为空
报错中的size 0明确说明data[data['Tm'] == 'SFO']返回的是空数据集,没有匹配到任何球员数据。此时将空数据集转为numpy数组后,访问索引[1]必然触发越界错误。 - 具体可能原因
- 球队缩写不匹配:原始数据中旧金山49人队的缩写可能是
SF而非代码中使用的SFO - 过滤数据缺失:
data_radar_filtered可能在生成时排除了目标球队的球员(比如位置筛选错误、球队范围限制) - 格式不一致:球队缩写的大小写或格式不匹配(比如数据中是小写
sf,代码中用大写SFO)
- 球队缩写不匹配:原始数据中旧金山49人队的缩写可能是
解决方案
1. 验证筛选逻辑
先检查目标球队是否存在于过滤后的数据中:
# 查看data_radar_filtered中所有球队缩写 print(data_radar_filtered['Tm'].unique()) # 直接查询SFO的匹配结果 print(data_radar_filtered[data_radar_filtered['Tm'] == 'SFO'])
如果输出为空,需修正球队缩写或检查data_radar_filtered的生成逻辑。
2. 修复get_rb_data函数
增加空值判断,避免报错并给出明确提示:
def get_rb_data(data, team): team_data = data[data['Tm'] == team] if team_data.empty: raise ValueError(f"无{team}球队数据,请检查球队缩写或数据过滤规则") # 若球队有多个跑卫,可根据需求选择(取第一个球员或全队平均值) return np.asarray(team_data.iloc[0]) # 取第一个球员数据,或用team_data.mean()取全队平均
3. 确认数据过滤逻辑
检查data_radar_filtered是否正确保留了跑卫数据:
# 确认位置筛选是否仅保留跑卫 print(data_radar_filtered['Pos'].unique()) # 确认目标球队是否在数据中 print('SFO' in data_radar_filtered['Tm'].unique())
内容的提问来源于stack exchange,提问作者Martin Malek
相关产品推荐
相关产品推荐

