显示列表按字母顺序排序

时间:2019-06-24 13:30:50

标签: python python-3.x

我们正在尝试创建一个接受输入的函数,其中一些数据包含以下信息: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等。

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()

不是有效字符。 [:和]之间的部分必须是整数

相关问题