在Python中计算某些列表值的平均值

2024-09-28 17:23:15 发布

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

我一直试图计算.csv文件每行中第三、第四和第五个值的平均值,但我的程序只计算第一行,而不是每行。 例如,此代码:

file=open("file.csv", "r")
data=csv.reader(file)

data=[[row[0],row[1],eval(row[2]),eval(row[3]),eval(row[4])] for row in data]

from statistics import mean

numbers=[row[2],row[3],row[4]]
newdata=[[row[0],row[1],mean(numbers)] for row in data]
sort=sorted(newdata,key=operator.itemgetter(2), reverse=True)


for eachline in sort:
    print(eachline)

file.close()

…读取此文件:

Phillip,Turner,1,4,10
Sarah,Connor,4,8,1
Alex,Grice,2,10,3
Cheesy,Wotsit,3,2,6
Chris,Mclaughlin,10,9,8
Alison,Humphries,4,2,6

产生了这样的结果:

['Phillip', 'Turner', 4.0]
['Sarah', 'Connor', 4.0]
['Alex', 'Grice', 4.0]
['Cheesy', 'Wotsit', 4.0]
['Chris', 'Mclaughlin', 4.0]
['Alison', 'Humphries', 4.0]

Tags: 文件csvinfordataevalmeansort
3条回答

实际上这不是第一行的平均值,而是最后一行的平均值。在第一个列表理解之后,row假设最后一行的值,当您使用row[2]创建数字列表时,您将使用最后一行的值创建一个静态列表。你知道吗

你可以用正确的数字来纠正这个问题:

file=open("file.csv", "r")
data=csv.reader(file)

data=[[row[0],row[1],eval(row[2]),eval(row[3]),eval(row[4])] for row in data]

from statistics import mean

newdata=[[row[0],row[1],mean([row[2],row[3],row[4]])] for row in data]
sort=sorted(newdata,key=operator.itemgetter(2), reverse=True)


for eachline in sort:
    print(eachline)

file.close()

试着这样做:

with open('your_file') as f:
    for x in f:
        x = x.strip().split()
        print x + [sum(map(int,x[2:]))/float(len(x[2:]))]

您必须对每一行执行numbers=[row[2],row[3],row[4]]。不止一次。 你可以做:

In [511]: data = csv.reader(open('../a.csv'))

In [512]: x = [[row[0], row[1], np.mean(map(float, row[2:]))] for row in data]

In [513]: x
Out[513]: 
[['Phillip', 'Turner', 5.0],
 ['Sarah', 'Connor', 4.333333333333333],
 ['Alex', 'Grice', 5.0],
 ['Cheesy', 'Wotsit', 3.6666666666666665],
 ['Chris', 'Mclaughlin', 9.0],
 ['Alison', 'Humphries', 4.0]]

In [514]: sorted(x, key=lambda v: v[2], reverse=True)
Out[514]: 
[['Chris', 'Mclaughlin', 9.0],
 ['Phillip', 'Turner', 5.0],
 ['Alex', 'Grice', 5.0],
 ['Sarah', 'Connor', 4.333333333333333],
 ['Alison', 'Humphries', 4.0],
 ['Cheesy', 'Wotsit', 3.6666666666666665]]

相关问题 更多 >