如果我有一个csv数据,它给出两个行值:
years grades
2001 98
2001 75
2008 100
2003 57
2008 50
我有更多的价值,但我会尝试解释我想要到达的地方。
我想获得每年的平均值。例如,对于2001年,答案是(98 + 75)/(2001年的计数数,在这种情况下为2)。
def construct_values(filing):
"""
Parameters
----------
Returns
-------
years: array of integers
average_grades: array of floats
"""
years, average_grades = [], []
grades = []
with open('grades.csv', 'r') as filing:
next(filing)
for row in file_path:
year, grade = (s.strip() for s in row.split(','))
years.append(year)
grades.append(grade)
return years, average_grades
我所做的只是获得两个年级和成绩的阵列。我不知道如何获得平均数组,然后打印出来像:
2001, 88.5555
例如,如果88.555是平均值。
我不想将它们当作字典,而是我想拥有的两个数组将会一起返回。
答案 0 :(得分:0)
为什么不建立一个年级密钥的成绩词典:
from collections import defaultdict
grades = defaultdict(lambda: [])
with open('grades.csv', 'r') as f:
year, grade = (s.strip() for s in row.split(','))
grades[year].append(grade)
然后打印平均值:
for y, g in grades:
print('{}: {}', y, sum(g) / float(len(g)))
答案 1 :(得分:0)
您可以使用defaultdict
形成一个字典,其值(grade
)是一个列表,键是year
,然后在字典中将等级添加到字典中的同一年data
1}}将是defaultdict(list)
:
defaultdict(<type 'list'>, {'2003': ['57'], '2008': ['100', '50'], '2001': ['98', '75']})
然后,你可以循环键和值来计算平均值:
from collections import defaultdict
data = defaultdict(list)
average_grade_by_year = dict()
with open('grades.csv', 'r') as filing:
next(filing)
for row in filing:
year, grade = (s.strip() for s in row.split(','))
data[year].append(grade)
for k, v in data.items():
average_grade_by_year[k] = float(sum(int(x) for x in v))/len(v)
print(average_grade_by_year)
average_grade_by_year
将是:{'2001': 86.5, '2003': 57.0, '2008': 75.0}