【问题标题】:How do I find the mean of data that has been entered in a csv file from python?如何找到从 python 输入到 csv 文件中的数据的平均值?
【发布时间】:2016-04-01 05:37:04
【问题描述】:

我想查找从 Python 创建的 csv 文件中三列的平均值。 我的数据是这样排列的:

[User Name, Score1, Score2, Score3]

例如

['James', 5, 8, 9]

我想求分数的平均值,589

newrecord = "{user_name},{score_1},{score_2},{score_3}\n".format(user_name=userName, score_1=quiz_scores[0], score_2=quiz_scores[1], score_3=quiz_scores[2])
file=open('classroom1.csv', "a+")
file.write(newrecord)
file.close()
with open('classroom1.csv') as csvfile:
    readCSV = csv.reader(csvfile)

我不知道这之后该怎么办。提前感谢您的任何反馈。

【问题讨论】:

  • 你能再具体一点吗?您是指每行中的值的平均值,还是每列的平均值,还是所有列组合的平均值?
  • 您可以使用pandas 轻松完成。你安装了那个包吗?
  • @AntonProtopopov:这是作业(英国 GCSE 考试)。 Pandas 太过分了。
  • @AntonProtopopov 我没有熊猫
  • 请不要破坏您的问题。

标签: python csv


【解决方案1】:

您的 readCSV 对象在迭代时将为您提供带有字符串的列表,每行 4 个值。将除第一列之外的所有列转换为整数,然后对这些整数进行计算:

for row in readCSV:
    name = row[0]
    scores = [int(c) for c in row[1:]]
    average = sum(scores) / len(scores)
    print('{}: {:.1f}'.format(name, average))

如果您使用的是 Python 2,那么 / 运算符可能会导致问题,因为当总和和长度都是整数时(这里就是这种情况),它将使用整数除法。将您的数字转换为 float,或使用 0.0 作为总和的起始值(确保总和是浮点数):

average = sum(scores, 0.0) / len(scores)

【讨论】:

  • @BobStanley:您可以使用format()str.format() 来格式化您的结果,包括指定小数位数。
  • 非常感谢,但是我将如何按平均升序对数据进行排序。
  • @BobStanley:你一直在移动球门柱!这篇文章确实回答了你的问题。您可以将名称和平均值放在一个列表中,或者将平均值添加到现有行中。用这些行构建一个新列表,然后对列表中的那些进行排序。
  • srt=sorted(row[0],total,reverse=True) #这样吗?
【解决方案2】:

我提出numpy 解决方案。

考虑带有内容的模型文件testfile.txt

James, 5, 8, 9
Jeff, 10, 7, 3
Alice, 6, 7, 1

我们可以使用numpy.loadtxt 来加载您的文件,然后只需map 对每一行取平均值。

>>> import numpy as np
>>> map(np.mean, np.loadtxt('testfile.txt', usecols=[1,2,3], delimiter=','))
[7.333333333333333, 6.666666666666667, 4.666666666666667]

【讨论】:

  • pandas 一样,numpy 对这个问题来说太过分了——尤其是对于 Python 新手。
猜你喜欢
  • 1970-01-01
  • 2021-12-13
  • 2016-05-05
  • 2016-05-31
  • 2018-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多