我有一个csv文件,存储了学生尝试每个问题的次数,其格式如下
UserID Q1 Q2 Q3 Q4
20 1 2 3 1
21 0 1 2 1
我正在尝试编写一个python程序来将数据存储到数组 attempts_count 中。
attempts_count = numpy.zeros(shape=(2000,200,200))
with open('Question_Attempts_Worksheet_1.csv' , 'r') as csvfile:
csvfile.readline() # skip the first line(column title)
for line in csvfile:
csv_row = line.split()
user_id = csv_row[0]
for question_counter in range(0,4):
attempts_count[user_id][1][question_counter] += csv_row[question_counter + 1]
我希望获得attempts_count[20][1][0]=1
,attempts_count[20][1][2]=3
等
但是,我收到一条错误消息
“IndexError:只有整数,切片(
:
),省略号(...
), numpy.newaxis(None
)和整数或布尔数组有效 指数”。
我可以知道如何解决这个问题?
答案 0 :(得分:2)
解决此问题的最佳方法是csv
个包,因为该文件采用csv
格式。这是使用csv
包完成的方法:
attempts_count = numpy.zeros(shape=(2000,200,200))
with open ('Question_Attempts_Worksheet_1.csv' , 'r') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
next(reader, None) # skip the headers
for row in reader:
for question_counter in range(0,4):
attempts_count[int(row[0])][1][question_counter] += int(row[question_counter + 1])
但是,要从代码开始,代码中至少可以识别出三个问题。
第一个问题出在你的userId
上,因为你是从CSV
文件获得的,它是string
而不是整数。在使用之前尝试将其转换为int
:
user_id = int(csv_row[0]) #here, get this as integer
第二个问题是您似乎没有基于,
分隔符拆分CSV行(而CSV文件的行值用逗号分隔)。因此,使用分隔符string.split(',')
更新,
。
csv_row = line.split(',') # put , as separator here
最后,第三个问题类似于第一个问题。由于您希望将csv_row[question_counter + 1]
添加到attemps_count
,因此必须将其转换为数字:
attempts_count[user_id][1][question_counter] += int(csv_row[question_counter + 1])
完整代码应如下所示:
attempts_count = numpy.zeros(shape=(2000,200,200))
with open('Question_Attempts_Worksheet_1.csv' , 'r') as csvfile:
csvfile.readline() # skip the first line(column title)
for line in csvfile:
csv_row = line.split(',') # put , as separator here
user_id = int(csv_row[0]) #here, get this as integer
for question_counter in range(0,4):
attempts_count[user_id][1][question_counter] += int(csv_row[question_counter + 1])