繁体   English   中英

如何在python中找到csv文件的平均列?

[英]How do I find the average of a column of a csv file in python?

我正在尝试从csv文件中不同时间的APM列表中找到平均APM(每分钟操作数)。 当我尝试使用以下代码进行操作时:

import csv

with open('test_game.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
    x = (row['Total APM'])
    x_sum = sum(x)
    x_length = len(x)
    x_average = x_sum / x_length
    print(x_average)

我收到此错误:

Traceback (most recent call last):
File "C:/Users/Luke's Laptop/Desktop/magicka_practice.py", line 7, in <module>
x_sum = sum(x)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

这是否意味着我必须将csv行的输出更改为一个整数列表(如果是,怎么办?)?或者我的代码是否存在明显公然的错误。 我对此很陌生,所以这可能是一个愚蠢的问题,或者我正在做一些非常明显的事情。 感谢您能提供的任何帮助。

更改此行:

x = (row['Total APM'])

至:

x = int(row['Total APM'])

这会将您的字符串/数字转换为可以进行数值运算的实际整数。

这是您的代码中可能正在发生的事情:

>>> x = "1"
>>> sum(x)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> y = int(x)
>>> sum(y)
1

Python是强类型的,因此通常您不能对不兼容的不同类型执行任意操作。 例如: int + str将导致TypeError

您可能想要的是:

import csv

with open('test_game.csv') as csvfile:
reader = csv.DictReader(csvfile)
xs = []
for row in reader:
    try:
        x = int(row['Total APM'])
        xs.append(x)
    except ValueError:
        print("Error converting: {0:s}".format(row['Total APM']))
x_average = sum(xs) / len(xs)
print(x_average)

注意:您要在遍历所有行后计算整个列的“平均值”。 因此,您想要保持运行总计,然后在循环外计算平均值。

更新:或者( 更符合您的原始算法 ),您可以执行以下操作:

导入csv

with open('test_game.csv') as csvfile:
reader = csv.DictReader(csvfile)
x_sum = x_length = 0
for row in reader:
    try:
        x = row['Total APM']
        x_sum = += int(x)
        x_length += 1
    except ValueError:
        print("Error converting: {0:s}".format(x))
x_average = x_sum / x_length
print(x_average)

这样可以保持运行总和和总长度,但是* NB **仍然必须计算循环外的平均值,除非您要计算运行平均值:)

更新#2: @Karl建议-捕获任何错误并适当处理它们是一个主意。 “适当地”取决于您,并取决于用例:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM