Python 读取CSV文件,计算平均值并打印所述平均值

Python 读取CSV文件,计算平均值并打印所述平均值,python,Python,我被分配了一项任务,为小学成员创建一个测验。除了这一项,我已经完成了每一项任务 我必须通过以下方式计算CSV文件中的分数: •按字母顺序排列,每个学生的考试最高分数 •按最高分,从高到低 •根据平均得分,从高到低 这是我到目前为止的代码。它似乎没有计算平均值,即使我有效地遵循了PowerPoint。PowerPoint中的所有内容都在代码中 以下是我目前掌握的情况: import csv results = open("Scores1.csv", "r+") csv1 = csv.reader

我被分配了一项任务,为小学成员创建一个测验。除了这一项,我已经完成了每一项任务

我必须通过以下方式计算CSV文件中的分数: •按字母顺序排列,每个学生的考试最高分数 •按最高分,从高到低 •根据平均得分,从高到低

这是我到目前为止的代码。它似乎没有计算平均值,即使我有效地遵循了PowerPoint。PowerPoint中的所有内容都在代码中

以下是我目前掌握的情况:

import csv

results = open("Scores1.csv", "r+")
csv1 = csv.reader(results, delimiter=",")


data = []

for eachline in csv1:
    print(eachline)
    eachline[1] = int(eachline[1])
    eachline[2] = int(eachline[2])
    eachline[3] = int(eachline[3])
    highscore = max(eachline[1:4])
    eachline.append(highscore)
    average = round(sum(eachline[1:4])/3)
    eachline.append(average)
    data.append(eachline)

print(data)
我得到的错误是:

Traceback (most recent call last):
  File "Z:\My Work\Year 11\Computing\A453 Programming Project\PythonFiles\scores.py", line 17, in <module>
    eachline[1] = int(eachline[1])
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“Z:\My Work\Year 11\Computing\A453 Programming Project\PythonFiles\scores.py”,第17行,在
eachline[1]=int(eachline[1])
索引器:列表索引超出范围
我不理解给我的错误,因为CSV文件中的所有内容看起来都很好。 我不是最擅长的,我想要一个简单的答案,这样我才能有效地理解它并从中学习


非常感谢。

看看熊猫图书馆,例如,可以像这样获得行的平均值和最大值,但您的示例应该更精确,无法真正看到csv文件的确切结构:

import pandas as pd

data = pd.read_csv("Scores1.csv")
data['mean']= data.mean(axis=1)
data['max'] = data.max(axis=1)
给你:

class Student(object):

    def __init__(self, name):
        self.name = name
        self.scores = []
        self.highestscore = 0

    def __repr__(self):
        return '<' + self.name + ', ' \
              + 'high=' + str(self.highestscore) + ', ' \
              + 'avg=' + str(self.getAverage()) + '>'

    def addScore(self, score):
        self.scores.append(score)
        self.highestscore = max(self.highestscore, score)

    def getAverage(self):
        l = len(self.scores)
        if l == 0:
            return 0
        else:
            return sum(self.scores) / l

import csv

results = open("C:\Projetos\Data\Python\Scores1.csv", "r+")
csv1 = csv.reader(results, delimiter=",")


data = {}
highscore = 0

for eachline in csv1:
    #print(eachline)
    name = eachline[0]

    student = data.get(name, None)
    if student == None:
        student = Student(name)
        data[name] = student

    score = int(eachline[1])
    student.addScore(score)

students = [data[key] for key in data]

sorted_alphabetically = sorted(students, key=lambda x:x.name)
sorted_by_highest_score = sorted(students, key=lambda x:x.highestscore, reverse=True)
sorted_by_avg_score = sorted(students, key=lambda x:x.getAverage(), reverse=True)

print 'sorted_alphabetically =', sorted_alphabetically
print 'sorted_by_highest_score =', sorted_by_highest_score
print 'sorted_by_avg_score =', sorted_by_avg_score
输出:

sorted_alphabetically = [<a, high=3, avg=2>, <b, high=5, avg=4>, <c, high=6, avg=4>, <e, high=9, avg=5>]
sorted_by_highest_score = [<e, high=9, avg=5>, <c, high=6, avg=4>, <b, high=5, avg=4>, <a, high=3, avg=2>]
sorted_by_avg_score = [<e, high=9, avg=5>, <c, high=6, avg=4>, <b, high=5, avg=4>, <a, high=3, avg=2>]
按字母顺序排序=[,]
按最高得分排序=[,]
按平均得分排序=[,]

您的CSV文件中有4列或5列吗?您好,我有两列-Name和score,但您也在访问第3列和第4列:eachline[2],eachline[3]是否应该是eachrow?或者是完全不同的东西?只需搜索一个好的例子并做一些类似的事情——代码中有太多错误的东西。肯定有很多类似的问题。谢谢,我会调查的。谢谢。我将以此为例
sorted_alphabetically = [<a, high=3, avg=2>, <b, high=5, avg=4>, <c, high=6, avg=4>, <e, high=9, avg=5>]
sorted_by_highest_score = [<e, high=9, avg=5>, <c, high=6, avg=4>, <b, high=5, avg=4>, <a, high=3, avg=2>]
sorted_by_avg_score = [<e, high=9, avg=5>, <c, high=6, avg=4>, <b, high=5, avg=4>, <a, high=3, avg=2>]