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

IndexError求助:numpy数组索引越界(冰球分析程序开发)

解决冰球分析程序中的IndexError问题

问题背景

我正在开发一个基础冰球分析程序,作为pandas和numpy新手,遇到了IndexError问题。已筛选出NYR队的game_id并转为numpy数组,希望去掉每个ID的前5位数字,但在循环中直接用数组元素作为索引访问时,出现了“index 2021020004 is out of bounds for axis 0 with size 82”的错误。

相关代码

筛选数据的代码:

import numpy as np

nyr_sched = nhl2021_22_sched[(nhl2021_22_sched['home_team'] == 'NYR') | (nhl2021_22_sched['away_team'] == 'NYR')]

# 这段循环完全多余,直接取列即可
for game in nyr_sched:
    nyr_GID = nyr_sched['game_id']

nyr_GID = np.array(nyr_GID)
nyr_GID.tolist()  # 此行未赋值,无实际作用
nyr_GID

输出:

array([2021020004, 2021020011, 2021020023, 2021020035, 2021020059,...])

错误代码:

for i in nyr_GID:
    nyr_GID[i] = nyr_GID[i][5:]
    print("Game {} ID is {}".format(i, nyr_GID[i]))

错误栈:

IndexError                                Traceback (most recent call last)
/var/folders/v8/z9h_xhmj1t38rzq1351q_my40000gn/T/ipykernel_13046/4170336391.py in <module>
      1 count = 0
      2 for i in nyr_GID:
----> 3     nyr_GID[i] = nyr_GID[i][5:]
      4     print("Game {} ID is {}".format(i, nyr_GID[i]))

IndexError: index 2021020004 is out of bounds for axis 0 with size 82

错误原因

核心问题有两个:

  1. 循环变量误用:for i in nyr_GID中的i是数组里的game_id数值(比如2021020004),而非数组的索引(0、1、2...)。用这个超大数值去访问数组索引,必然超出数组长度(82个元素,最大索引为81)。
  2. 数据类型不匹配:当前nyr_GID的元素是整数类型,整数不支持切片操作,必须先转为字符串才能执行[5:]截取。

解决方案

方法1:直接用pandas处理(最推荐)

既然数据来自pandas DataFrame,无需转numpy数组,直接对列做字符串处理更高效:

# 将game_id转为字符串,截取第5位及之后的子串
nyr_sched['short_game_id'] = nyr_sched['game_id'].astype(str).str[5:]

# 若需要numpy数组,再转换
nyr_GID_short = nyr_sched['short_game_id'].to_numpy()

方法2:修正numpy循环写法

如果一定要用numpy,先转字符串类型,再通过索引循环:

# 转换为字符串数组
nyr_GID_str = nyr_GID.astype(str)

# 使用数组索引循环(0到81)
for idx in range(len(nyr_GID_str)):
    short_id = nyr_GID_str[idx][5:]
    print(f"Game {nyr_GID_str[idx]} ID is {short_id}")

# 更高效的向量化操作(替代循环)
nyr_GID_short = nyr_GID_str.str[5:]

额外优化:删除冗余代码

原代码中有两段无效代码,可直接删除:

  • 遍历nyr_sched的循环完全多余,直接通过nyr_GID = nyr_sched['game_id']取列即可。
  • nyr_GID.tolist()未赋值给变量,执行后无实际效果,可删除。

内容的提问来源于stack exchange,提问作者bildungsroman11

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:25:34