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

Python numpy处理txt数据报IndexError索引越界问题

问题描述

我正在对.txt文件中的数据进行清洗,共使用3份不同的.txt文件分别分析、清洗三类不同构念的数据。三份文件均包含10名受访者的作答数据,其中第一份与最后一份文件内每名受访者对应17条作答,中间文件内每名受访者对应16条作答。目前第一份、最后一份文件的处理代码可正常运行,但处理包含16道题的中间文件时出现索引报错,三段处理代码的逻辑几乎完全一致。

报错信息
Traceback (most recent call last):
  File "main.py", line 161, in <module>
    itemF = dataF[row,column]
IndexError: index 16 is out of bounds for axis 1 with size 16
样本输入数据
['N.v.t.', '0', '1', '2', '1', 'N.v.t.', '0', '0', '2', '0', '0', '3', '2', '3', '1', '1']
['N.v.t.', '1', 'N.v.t.', '0', '0', 'N.v.t.', '2', '0', 'N.v.t.', '1', '0', '1', '1', '2', '0', '1']
['N.v.t.', '0', 'N.v.t.', '0', '0', 'N.v.t.', '0', '0', 'N.v.t.', '0', '0', '3', '0', '3', '0', '0']
['2', '2', 'N.v.t.', '1', '3', '1', '2', '1', '1', '3', '2', '2', '3', '1', '2', '3']
['1', '2', 'N.v.t.', '0', '0', 'N.v.t.', '2', '2', '0', '2', '1', '2', '2', '3', '1', '2']
['N.v.t.', '0', 'N.v.t.', '1', '0', 'N.v.t.', '1', '2', 'N.v.t.', '1', '0', '3', '1', '3', '2', '2']
['0', '3', 'N.v.t.', '0', '2', '3', '2', '1', '3', '2', '2', '2', '2', '3', '0', '1']
['1', '3', 'N.v.t.', '0', '2', 'N.v.t.', '0', '2', 'N.v.t.', '0', '1', '1', '0', '2', '2', '1']
['1', '2', '2', '2', '3', '3', '0', '2', '2', '2', '2', '2', '2', '2', '2', '1']
['1', '2', 'N.v.t.', '0', '2', 'N.v.t.', '1', '3', '2', '2', '1', '3', '2', '2', '2', '2'] 
原始问题代码
import numpy
dataF = numpy.loadtxt("answersFEAR.txt", dtype = str, delimiter = ", ")
shapeF = dataF.shape
(shapeF[0] == 5)
print(dataF)
for i in range(0, shape[0]):
    str1 = dataF[i, 0]
    str2 = dataF[i, -1]
    dataF[i, 0] = str1.replace('[', '')
    dataF[i, -1] = str2.replace(']', '')
for column in range(0,shape[1]):
 for row in range(0, shape[0]):
   itemF = dataF[row,column]
   dataF[rij,kolom] = itemF.replace("'", '')
dataF[dataF == 'N.v.t.'] = numpy.nan
print("DATA FEAR")
print(dataD)
scoresF = dataF[:,1:17]
scoresF = scoresF.astype(float)
average_score_fear = numpy.nanmean(scoresF, axis = 1)
print("")
print("AVERAGE SCORE FEAR")
print(average_score_fear)
预期输出效果(单条结果示例)
["['1'" "'2'" "'2'" "'2'" "'3'" "'3'" "'0'" "'2'" "'2'" "'2'" "'2'" "'2'" '2'" "'2'" "'2'" "'1']"] 
DATA FEAR
[['1', '2', '2', '2', '3', '3', '0', '2', '2', '2', '2', '2', '2', '2', '2', '1']]
AVERAGE SCORE FEAR
错误原因
  • 核心索引越界问题:numpy数组切片遵循左闭右开规则,16题的中间文件加载后总列数为16,列索引范围是0-15。代码中硬编码切片[:,1:17]会尝试访问索引为16的列,超出数组最大索引范围,触发报错。之前17题的文件总列数为17,最大索引是16,所以该切片不会越界,能正常运行。
  • 多处变量名拼写错误:定义的数组形状变量为shapeF,循环中错写为shape;替换单引号时赋值目标错写为未定义的rij,kolom,正确变量名应为row,column;打印清洗后数据时错把dataF写为dataD,这些拼写问题也会导致运行异常。
  • 存在无效代码行:(shapeF[0] == 5)没有绑定任何逻辑或赋值,且实际数据为10行,该判断无实际作用。
修复后代码

修复后代码不再硬编码列索引,可同时兼容16题、17题的文件,所有变量名拼写错误均已修正:

import numpy
dataF = numpy.loadtxt("answersFEAR.txt", dtype = str, delimiter = ", ")
shapeF = dataF.shape
print(dataF)

# 清理首尾的[]符号
for i in range(0, shapeF[0]):
    str1 = dataF[i, 0]
    str2 = dataF[i, -1]
    dataF[i, 0] = str1.replace('[', '')
    dataF[i, -1] = str2.replace(']', '')

# 清理所有元素的单引号
for column in range(0, shapeF[1]):
    for row in range(0, shapeF[0]):
        itemF = dataF[row,column]
        dataF[row,column] = itemF.replace("'", '')

# 替换缺失值
dataF[dataF == 'N.v.t.'] = numpy.nan
print("DATA FEAR")
print(dataF)

# 取所有题目列(自动适配列数,不用硬编码数值)
scoresF = dataF[:,1:shapeF[1]]
scoresF = scoresF.astype(float)
average_score_fear = numpy.nanmean(scoresF, axis = 1)
print("")
print("AVERAGE SCORE FEAR")
print(average_score_fear)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:03:21