如何在Python中找到txt文件中一列的平均值?

时间:2019-05-07 16:27:56

标签: python python-3.x

练习一些Python并试图解决一个问题,该问题要求在文本文件中获取学生的平均年龄。例如如下所示的.txt文件。

   Sam, 23
   Jack 20
   Tara 19
   Stacy 22

通常我会用错误消息重新跟踪我的步骤,但是我的输出仅为0。我不确定使用read而不是readlines是否正确。

def sumNums():
    infile = open('student_age.txt', 'r')
    fileContents = infile.read()
    infile.close

    count= 0

    for lines in fileContents.split(','):
        if lines.isdigit():
            count += lines

    print(sum(count) / len(lines))

实际输出应为21,因为84/4 = 21,但我得到0

5 个答案:

答案 0 :(得分:0)

开始更简单。首先,简单地编写将在像这样的逗号分隔文件的各行之间进行迭代的代码,并打印出每行的第二个值(数字)。

with open('path/to/file.csv') as f:
    for line in f:
        field1, field2 = line.split(',')
        print(field2)

然后,您可以开始考虑如何处理将这些值保存在内存中并对其求平均。

with open('path/to/file.csv') as f:
    total = 0
    count = 0
    for line in f:
        field1, field2 = line.split(',')
        total += int(field2)
        count += 1

result = total / count

然后,您可以看看如何使用stdlib csv模块对其进行重构。

import csv

with open('path/to/file.csv') as f:
    reader = csv.reader(f)
    numbers = [int(num) for _, num in reader]
    total, count = sum(numbers), len(numbers)

result = total / count

答案 1 :(得分:0)

尝试使用

int(float("age"))

这应该将字符串转换为数值,您可以轻松地从中取平均值

sum("age")/len("age")

答案 2 :(得分:0)

这是完成此任务的另一种方法:

rentLabel

答案 3 :(得分:0)

def sumNums():
    with open('student_age.txt', 'r') as f:
        count = i = 0
        for line in f:
            name, number = line.split(',')
            if number.strip().isdigit():
                count += int(number)
            i += 1

        print(count / i)

sumNums()

答案 4 :(得分:-1)

您的文件处理不正确。 infile.read()返回文件中的所有行。因此,您应该首先用'\n'符号将其分割,然后再使用',':

for line in fileContents.split('\n'):
    for element in line.split(','):
        ...

但是有更好的解决方案...

Pandas

import pandas as pd
df = pd.read_csv('student_age.txt', headers=None)
df[1].mean()  # If you have more than 2 columns, 1 can be replaced by the actual column

三行代码,您就是国王。