CSV流感数据处理问题:提取目标年份活动等级并计算均值
问题解决:按年份计算北卡罗来纳州流感活动等级均值
原代码的问题分析
- 筛选条件错误:
row[0] == 'Level'不成立,因为row[0]的实际格式是Level 1、Level 2这类带数字的字符串,这个条件会过滤掉所有有效数据 - 数据存储方式不合理:用单一列表存储所有等级,无法区分不同年份的数据,后续无法按年份计算均值
修改后的完整代码
import csv with open('influenza (2).csv', 'r') as influenza_file: contents_1 = csv.reader(influenza_file) rows = [] row_count = 1 for row in contents_1: if 16259 <= row_count <= 16751: columns_selected = [row[3], row[7]] rows.append(columns_selected) row_count += 1 target_year = ['2013-14', '2014-15', '2015-16', '2016-17', '2017-18', '2018-19', '2019-20', '2020-21', '2021-22'] # 用字典按年份存储对应的等级数值 year_levels = {year: [] for year in target_year} for row in rows: level_str, year = row[0], row[1] # 只处理目标年份内的数据,且等级字符串符合Level X格式 if year in target_year and level_str.startswith('Level '): # 提取数字部分并转为整数 level = int(level_str.replace('Level ', '')) year_levels[year].append(level) # 计算每个年份的平均等级 year_avg = {} for year, levels in year_levels.items(): if levels: # 避免空列表除以0 year_avg[year] = sum(levels) / len(levels) else: year_avg[year] = 0 # 或根据需求设为None # 输出结果 for year, avg in year_avg.items(): print(f"{year} 年度平均流感活动等级: {avg:.2f}")
修改说明
- 修正筛选逻辑:将
row[0] == 'Level'改为level_str.startswith('Level '),确保能匹配所有带等级的字符串 - 改用字典存储:创建
year_levels字典,键是目标年份,值是对应年份的所有等级数值列表,方便按年份分组 - 数据类型转换:把提取出的等级字符串转为整数,才能进行均值计算
- 均值计算与输出:遍历字典计算每个年份的平均值,处理空数据的情况,最后格式化输出结果
内容的提问来源于stack exchange,提问作者Nick Brewen
相关产品推荐
相关产品推荐

