只能从csv中找到第一列的平均值,其他列显示0

2024-09-27 01:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

得到一个只有2行数据的csv列表,需要查找并显示3个分数的平均值

name tribe id Score1 Score2 Score3 Score4

Aang Normad N321B 89 67 54 78

Gyatso Omaticay O111C 54 78 65 54

设法打印Score1的平均值,但Score2、3和4显示为0,不确定代码的哪一部分是错误的。将感谢任何能指出正确方向的人

def display_element_average():
   with open(filePath) as csvfile:
    reader = csv.DictReader(csvfile)
    air_average= sum(float(row["Air"]) for row in reader) /2
    water_average= sum(float(row["Water"]) for row in reader) /2
    earth_average= sum(float(row["Earth"]) for row in reader) /2
    fire_average= sum(float(row["Fire"]) for row in reader) /2
    print("==============================")
    print("Display element average")
    print("==============================")
    print("{0:<6}{1:^8}{2:^7}{3:^7}".format("Air |","Water |","Earth |","Fire |"))            
    print("{0:^6}{1:^8}{2:^7}{3:^7}".format(air_average, water_average, earth_average, fire_average))               

def menu():
    print ("=================================================================")
    print ("Welcome to Avatar Element System")
    print ("=================================================================")
    print ("1: Display element average")
    print ("2: Display avatar top element")
    print ("0: Exit")
    choice= input ("Enter choice:")
    if (choice == "1"):
        display_element_average()
    elif (choice =="2"):
        display_avatar_top_elements()
    elif (choice =="0"):
        print ("=================================================================")
        print ("Thank you for using Avatar Element System")
        print ("=================================================================")        
        exit (0)

menu()

Tags: csvinfordisplayelementfloatreaderrow
1条回答
网友
1楼 · 发布于 2024-09-27 01:18:51

第一个生成器表达式将耗尽reader对象,因此下面的表达式没有可迭代的内容

可以在for循环中累积值,然后在循环结束后计算平均值

air, water, earth, fire = 0,0,0,0
with open(filePath) as csvfile:
    reader = csv.DictReader(csvfile)
    for count, row in enumerate(reader, 1):
        air += float(row["Air"])
        water += float(row["Water"])
        earth += float(row["Earth"])
        fire += float(row["Fire"])
fireave= fire / count
earthave = earth / count
waterave = water / count
airave = air / count

相关问题 更多 >

    热门问题