我尝试从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)
答案 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)
您可以为dict
和defaultdict
创建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
,其中包含按年份分组的值列表。然后,您可以根据需要将其用于其他统计信息。