You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

问题原因

  1. 核心触发点:筛选结果为空
    报错中的size 0明确说明data[data['Tm'] == 'SFO']返回的是空数据集,没有匹配到任何球员数据。此时将空数据集转为numpy数组后,访问索引[1]必然触发越界错误。
  2. 具体可能原因
    • 球队缩写不匹配:原始数据中旧金山49人队的缩写可能是SF而非代码中使用的SFO
    • 过滤数据缺失:data_radar_filtered可能在生成时排除了目标球队的球员(比如位置筛选错误、球队范围限制)
    • 格式不一致:球队缩写的大小写或格式不匹配(比如数据中是小写sf,代码中用大写SFO)

解决方案

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:23:22