平均数据列

时间:2014-06-17 02:35:20

标签: python

好的所以我给了带有标题的文本文件,然后每行开始一年,然后包含12个数字,对应于1977年到2012年的一年中的几个月。我应该写一个程序使用函数来添加和平均基于年份的数据,但我正在努力解决这个问题。任何帮助都会很棒

3 个答案:

答案 0 :(得分:0)

这应该让你开始。

假设这是csv:

year,number_1, number_2...
1911,1,2...
1912,1,3
1933,1,4,

import csv

dict_reader = csv.DictReader(open('myfile.txt'))
average_by_year = collections.defaultdict(int)
for row in dict_reader:
  current_year = row['year']
  average_by_year[current_year] = (
    sum((value for key, value in row.iteritems() if key != 'year')) / 12)

答案 1 :(得分:0)

这应该可行。它逐行遍历数据文件,并平均除第一列之外的每一列的总和。

with open(csvfile) as data:
    print [sum(map(int,line[:-1].split(',')[1:]))/12 for line in data]

答案 2 :(得分:0)

这似乎是编码竞赛(或可能是作业)的经典新手I / O问题

算法

  1. 使用函数file.open()
  2. 打开文件
  3. 使用函数file.readline()
  4. 逐行读取文件
  5. 拆分读取字符串以创建具有函数string.split()
  6. 的列表
  7. 类型广告string to int
  8. slicing
  9. 的帮助下,将列表切片以将每个月的值列表与索引0处的年份分开
  10. 使用基本算术函数,如sum()& len()计算平均值。
  11. Bonus:使用函数file.write()
  12. 将数据写入另一个文件

    [SPOILER CODE]不要将鼠标悬停在

    之下
      

     symbol_separating_12_numbers = ','
     f = open('filename.txt')
     no_cases = int(f.readline())  #assuming no of cases on the first line as header
     for case in xrange(no_cases):
         data = [int(number) for number in f.readline().split(symbol_separating_12_numbers)]
         months = data[1:]
         print "%s: %s" % (data[0], sum(months)/len(months)