如何根据该数据解析csv文件并计算统计信息

时间:2015-12-17 15:49:03

标签: python python-3.x csv pandas

我有一项任务要求我在python中创建一个程序,该程序读取一个文本文件,其中包含有关人员(姓名,体重和身高)的信息。

然后我需要该程序要求用户输入一个名称,然后在文本文件中查找该名称,并打印出包含该名称和该人的身高和体重的行。

然后程序必须计算出人的平均体重和平均身高。

文本文件是:

James,73,1.82,M
Peter,78,1.80,M
Jay,90,1.90,M
Beth,65,1.53.F
Mags,66,1.50,F
Joy,62,1.34,F

到目前为止,我有这个代码使用用户输入的名称打印出行,但我不知道分配高度和权重:

search = input("Who's information would you like to find?")
with open("HeightAndWeight.txt", "r") as f:
    for line in f:
        if search in line:
            print(line)

5 个答案:

答案 0 :(得分:4)

按照建议使用pandas库,您可以执行以下操作:

import pandas as pd
df = pd.read_csv('people.txt', header=None, index_col=0)
df.columns = ['weight', 'height', 'sex']
print(df)

       weight  height sex
0                        
James      73    1.82   M
Peter      78    1.80   M
Jay        90    1.90   M
Beth       65    1.53   F
Mags       66    1.50   F
Joy        62    1.34   F

print(df.mean())

weight    72.333333
height     1.648333

答案 1 :(得分:3)

您可以使用内置csv模块的Python将文件中的每一行拆分为列列表,如下所示:

import csv

with open('HeightAndWeight.txt', 'rb') as f_input:
    csv_input = csv.reader(f_input)
    total_weight = 0
    total_height = 0

    for index, row in enumerate(csv_input, start=1):
        total_weight += float(row[1])
        total_height += float(row[2])

    print "Average weight: {:.2f}".format(total_weight / index)
    print "Average height: {:.2f}".format(total_height / index)

这将显示以下输出:

Average weight: 72.33
Average height: 1.65

答案 2 :(得分:1)

答案实际上在您的问题标题中:使用standard lib's csv module来解析您的文件

答案 3 :(得分:0)

search = input("Who's information would you like to find?")
heights = []
weights = []
with open("HeightAndWeight.txt", "r") as f:
    for line in f:
        if search in line:
            print(line)
            heights.append(int(line.split(',')[2]))
            weights.append(int(line.split(',')[1]))
# your calculation stuff

答案 4 :(得分:0)

使用:

splitted_line = line.split(',', 4)

使用逗号,作为分隔符,将刚刚找到的行拆分为四个部分。然后,您可以使用splitted_line[0]获取第一部分(名称),使用splitted_line[1]获取第二部分(年龄),依此类推。所以,要打印出人名,身高和体重:

print('The person %s is %s years old and %s meters tall.' % (splitted_line[0], splitted_line[1], splitted_line[2]))

要获得身高和年龄的平均值,您需要知道文件中有多少条目,然后将年龄和身高加起来除以条目数/人数。整件事情看起来像是:

search = input("Who's information would you like to find?")
total = 0
age = 0
height = 0
with open("HeightAndWeight.txt", "r") as f:
for line in f:
    total += 1
    splitted_line = line.split(',', 4)
    age += int(splitted_line[1])
    height += int(splitted_line[2]) 
    if search in line:
        print('The person %s is %s years old and %s meters tall.' % (splitted_line[0], splitted_line[1], splitted_line[2]))
average_age = age / total
average_height = height / total

这是一种直截了当的方式,也很容易理解。