特定字段Python3

时间:2016-02-10 13:09:12

标签: python-3.x

我尝试从Qdata.txt文件中选择特定字段,并使用字段[2]计算每年的平均值。我的代码只给出了总平均值。

数据文件如下:(1。一年中的一天:101和最后:1231)

  

日期3700300 6701500

     

20000101 21.00 223.00

     

20000102 20.00 218.00

     

     

20001231 7.40 104.00

     

20010101 6.70 104.00

     

     

20130101 8.37 111.63

     

。 。
  20131231 45.00 120.98

import sys

td=open("Qdata.txt","r") # open file Qdata

total=0
count=0
row1=True

for row in td :
    if (row1) :
            row1=False # row1 is for topic

    else:
            fields=row.split() 
            try:
                    total=total+float(fields[2])
                    count=count+1
            # Errors.
            except IndexError:
                    continue
            except ValueError:      
                    print("File is incorrect.")
                    sys.exit()

print("Average in 2000 was: ",total/count)

3 个答案:

答案 0 :(得分:0)

你可以使用itertools.groupby使用前四个字符作为分组的关键。

with open("data.txt") as f:
    next(f) # skip first line
    groups = itertools.groupby(f, key=lambda s: s[:4])
    for k, g in groups:
        print(k, [s.split() for s in g])

这将为您提供按年份分组的条目,以便进一步处理。 示例数据的输出:

2000 [['20000101', '21.00', '223.00'], ['20000102', '20.00', '218.00'], ['20001231', '7.40', '104.00']]
2001 [['20010101', '6.70', '104.00']]
2013 [['20130101', '8.37', '111.63'], ['20131231', '45.00', '120.98']]

答案 1 :(得分:0)

您可以为dictdefaultdict创建total(甚至是count):

import sys
from collections import defaultdict

td=open("Qdata.txt","r") # open file Qdata

total=defaultdict(float)
count=defaultdict(int)
row1=True

for row in td :
    if (row1) :
        row1=False # row1 is for topic

    else:
        fields=row.split() 
        try:
            year = int(fields[0][:4])
            total[year] += float(fields[2])
            count[year] += 1
        # Errors.
        except IndexError:
            continue
        except ValueError:      
            print("File is incorrect.")
            sys.exit()

print("Average in 2000 was: ",total[2000]/count[2000])

答案 2 :(得分:0)

每年分开?你必须将输入分成小组,这可能是你想要的东西:

from collections import defaultdict

row1 = True
year_sums = defaultdict(list)

for row in td:
    if row1:
        row1 = False
        continue
    fields = row.split()
    year = fields[0][:4]
    year_sums[year].append(float(fields[2]))

for year in year_sums:
    avarage = sum(year_sums[year])/count(year_sums[year])
    print("Avarage in {} was: {}".format(year, avarage)

这只是一些示例代码,我不知道它是否有效,但应该让你知道你能做些什么。 year_sums是一个defaultdict,其中包含按年份分组的值列表。然后,您可以根据需要将其用于其他统计信息。