我们正在尝试创建一个接受输入的函数,其中一些数据包含以下信息:ID号,名称以及包含不同作业成绩的列数,然后按字母顺序对数据进行排序(根据的名称),然后显示数据并添加一列,该列还显示最终成绩(由我们使用其他函数计算得出)。我们尝试编写以下代码,但无法使其正常工作...给定的错误消息为"names = GRADESdata[:,1].tolist() TypeError: string indices must be integers".
有人可以帮助我们弄清楚如何使其工作吗?
def listOfgrades(GRADESdata):
names = GRADESdata[:,1].tolist()
names = names.sort(names)
assignments = GRADESdata[:,2::]
final_grades = computeFinalGrades(GRADESdata)
final_grades = np.array(final_grades.reshape(len(final_grades),1))
List_of_grades = np.hstack((GRADESdata, final_grades))
NOofColumns = np.size(GRADESdata,axis = 1)
display = np.zeros(NOofColumns)
for i in names:
display = np.vstack((display,GRADESdata[GRADESdata[:,1] == i]))
grades = display[1::,2:-1]
gradesfinal = display[1::,-1]
#Column titles
c = {"Student ID": GRADESdata[1::,0], "Name": GRADESdata[1::,1]}
for i in range(GRADESdata.shape[1]):
c["Assign.{}".format(i+1)] = GRADESdata[:,i]
c["Final grade"] = final_grades
d = pd.DataFrame(c)
print(d.to_string())
display = np.array([student_list, names, assignments, final_grades])
return display
预期输出是这样的(数据在ofc下):
ID number Name Assignment 1 Assignment 2 Final Grade
编辑:数据输入是一个.csv文件,其中包含以下数据:ID号,名称,任务1,任务2等。
答案 0 :(得分:0)
从查看.tolist()
开始,我假设您应该使用的数据结构是numpy.ndarray。
我设法用以下代码复制该错误:
print("12354"[:,1].tolist())
这很有意义,如果您使用文件名作为输入-这就是您的错误。 为了解决此问题,您需要在函数的开头或外部实现字符串解析器。
在代码的开头添加以下内容:
file=open(GRADESdata,"r")
data=file.read()
file.close()
list1=data.split("\n")#Replace \n with appropriate line separator
list2=[e.split(",") for e in list1]
GRADESdata=numpy.array(list2)
答案 1 :(得分:0)
中的逗号
names = GRADESdata[:,1].tolist()
不是有效字符。 [:和]之间的部分必须是整数