2016-04-28 57 views
1

我必須製作一個函數,它需要兩個參數(.csv文件的名稱),用於計算某個人的寵物年齡的平均值。使用CSV文件的字典列表中元素的平均值

我有兩個CSV文件。第一個包含寵物的信息。像這樣的:enter image description here

第二個包含所有者的名稱和他們own.Like其中寵物這樣的:enter image description here

我的功能需要讀取此.csv文件,並用平均的返回另一個.csv文件寵物的年齡,由他們的主人區分。例如,約翰有三隻寵物(Michalengelo,Leonardo和Raphael),所以這些函數讀取兩個.csv文件並計算John的寵物年齡的平均值。亞當和伊娃也是如此。

我有一個函數,它將csv文件轉換爲字典。例如(與第一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

最簡單的方法是使用pandas模塊,您可以在10分鐘內學習該模塊。

考慮您的數據是這樣的單獨的CSV文件:

enter image description hereenter 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 
+0

從字面上看:http://pandas.pydata.org/pandas-docs/stable/10min.html – kingledion

+0

我是新來的Python我不太瞭解熊貓模塊的使用情況...... – Stagg

+0

非常感謝您的幫助!我使用空閒,它說,沒有模塊名稱熊貓,我怎樣才能將它安裝在我的電腦上? – Stagg

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 
+0

它給了我一個關鍵錯誤:'寵物名稱' – Stagg

+0

這發生在輸入文件和代碼具有錯誤的列名稱。該owner.txt應該是:\ n所有者的姓名,寵物的名字 約翰,米開朗基羅 伊娃,海魴 亞當,Rantarplan 約翰,萊昂納多 伊娃,菲利克斯 約翰,拉斐爾 伊娃,尼莫\ n和寵物。TXT應該是:\ n中的寵物,物種,年齡 菲利克斯,貓,8 米開朗基羅,龜,57 Rantarplan,狗,12 尼莫,魚,2 萊昂納多,龜,45 米洛的名稱,狗,9 Raphael,Tortoise,57 Dory,Fish,4 \ n我只根據您的屏幕截圖使用了列名。 – pmaniyan

+0

所有的列名都是這樣的順序和正確的,我不知道爲什麼它給我一個錯誤 – Stagg

相關問題