读取 CSV 文件并在行尾生成给定行中所有整数的总和

Reading a CSV file and producing a sum with all the integers in a given row at the end of the row

我目前正在处理 CSV 文件,但我的代码遇到了瓶颈。我试图达到的目标是能够编写一个包含 20 行和 10 列的 CSV 文件,其中 1 个包含随机名称,8 个包含随机整数,最后一个带有随机字母等级(我已经能够完成这一步成功)。然后读取文件,对每一行的整数(生成的所有随机整数)求和并找到所有 8 个分数(整数)的平均值并根据平均值打印最终字母等级并将它们放在最后一个空列和末尾每一行。在我目前的水平上,我一直无法找到这样做的方法,是否有任何我可以用于此目的的命令或任何有用的提示或提示? 这就是我到目前为止的情况。

import random
import csv
fname = ['Red','Jose','Mikasa','Sakura','Naruto','Momoka','Zero','Ryu','Ken','Geralt','Greg','Mika','Momo','Xenovia','John','Gary','Lance','Eren','Duke','Claire']
lname = ['Akerman','Haruno','Johnson','Rivia','Valentine','Redfield','Kennedy','Juarez','Jameson','Williams','Miller','Davis','Thompson','Garcia','Remington','Hayabusa','Strife','Armstrong','Kojima','Chambers']

def ranint():
    value = random.randint(60, 100)
    return value
def ranname():
    first = random.choice(fname)
    last = random.choice(lname)
    fname.remove(first)
    lname.remove(last)
    return ("; ".join([first, last]))

with open('grades2.csv','w',newline='') as fp:
    a = csv.writer(fp,delimiter=',')
    data = [['Name', 'If Else', 'Loops', 'Functions', 'File IO', 'Conditionals', 'Repetition', 'Python Functions', 'Input Output', 'Grade'],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ],
        [ranname(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ranint(), ]]
    a.writerows(data)
    fp.close()
with open('grades2.csv', 'r', newline='') as fh:
    z = csv.reader(fh)

您可以使用 pandas -

import pandas as pd

df = pd.read_csv('grades2.csv')
df['Total'] = df.sum(numeric_only=True, axis=1)
df['Mean'] = df['Total']/8

从代码的最后一部分继续,您可以尝试:

with open('grades2.csv', 'r', newline='') as fh:
    z = csv.reader(fh)
    next(z) #skip header
    for row in z:
        #slice the integer columns and convert to int
        integers=[int(i) for i in row[1:9] ]
        #find average   
        avg_integers=sum(integers)/len(integers)
        print(avg_integers)