包含CSV文件的词典列表中的元素的平均值

时间:2016-04-28 18:17:57

标签: python python-2.7 csv dictionary

我必须创建一个带有两个参数(.csv文件的名称)的函数,其中它计算某个人的宠物的平均年龄。

我有两个CSV文件。第一个包含宠物的信息。像这样:enter image description here

第二个包含所有者的名字以及他们拥有的宠物。就像这样:enter image description here

我的功能需要阅读此.csv文件并返回另一个.csv文件,其中包含宠物年龄的平均值,由其所有者区分。例如,约翰有三只宠物(Michalengelo,Leonardo和Raphael),因此这些函数读取两个.csv文件并计算约翰的宠物年龄的平均值。亚当和伊娃也是如此。

我有一个函数,它接受csv文件并将其转换为dict。例如(使用第一个csv文件):

read_csv_to_dict('Pets_info.csv'):
>>> [{'Age': '8', 'Name of the Pet': 'Felix', 'Species': 'Cat'}, {'Age': '57', 'Name of the Pet': 'Michelangelo', 'Species': 'Tortoise'}, {'Age': '12', 'Name of the Pet': 'Rantanplan', 'Species': 'Dog'}, {'Age': '2', 'Name of the Pet': 'Nemo', 'Species': 'Fish'}, {'Age': '45', 'Name of the Pet': 'Leonardo', 'Species': 'Tortoise'}, {'Age': '9', 'Name of the Pet': 'Milo', 'Species': 'Dog'}, {'Age': '57', 'Name of the Pet': 'Raphael', 'Species': 'Tortoise'}, {'Age': '4', 'Name of the Pet': 'Dory', 'Species': 'Fish'}]

我认为如果我用词典操纵这些数据我可以得到我想要的东西,我就不知道该怎么做。 如果你没有承担我的问题,请随时提出任何问题。 提前谢谢。

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用模块,您可以在10分钟内学习。

  

在单独的csv文件中考虑您的数据是这样的:

pandas enter image description here

  

这就是你在熊猫中可以做的事情:

import pandas as pd
#Read input csv files
own = pd.read_csv('OwenerPet.csv')
pet = pd.read_csv('PetAge.csv')
#Merge the dataframes on 'Pet Names'
ownpet = pd.merge(own,pet, on=['Pet Names'], how='inner')
#Group by owners and get the avarage
ownpetaverage = ownpet.groupby('Owners Name').mean()
#Print it, you could also save it by saying ownpetaverage.to_csv('average.csv')
print ownpetaverage

                   Age
Owners Name
Adam          7.000000
Eva          28.000000
John         22.666667

答案 1 :(得分:1)

pets.txt

Name of the Pet,Species,Age
Felix,Cat,8
Michelangelo,Tortoise,57
Rantarplan,Dog,12
Nemo,Fish,2
Leonardo,Tortoise,45
Milo,Dog,9
Raphael,Tortoise,57
Dory,Fish,4

owner.txt

Owner's Name,Pet Names
John,Michelangelo
Eva,Dory
Adam,Rantarplan
John,Leonardo
Eva,Felix
John,Raphael
Eva,Nemo

Python代码

import pandas as pd
import numpy as np

l_pets = pd.read_csv('pets.txt')
l_owner = pd.read_csv('owner.txt')

l_merged = l_pets.merge(l_owner,how='inner',left_on='Name of the Pet',right_on='Pet Names')
l_groupded = l_merged.groupby(by="Owner's Name")

print l_groupded.aggregate(np.average)

输出

                    Age
Owner's Name
Adam          12.000000
Eva            4.666667
John          53.000000