Python实现CSV指定年份预期寿命均值、最值及对应国家统计
Python预期寿命数据集分析代码补全
数据集与需求说明
- 所用CSV数据集共包含4个字段:
Entity(国家实体)、Code(国家编码)、Year(年份)、Life expectancy (years)(预期寿命),总计16000条记录 - 已完成功能:
- 查询全数据集范围内最低预期寿命对应的年份与国家
- 查询全数据集范围内最高预期寿命对应的年份与国家
- 待实现功能:支持用户输入指定年份,计算该年度所有国家的平均预期寿命,同时定位该年度预期寿命最高、最低的对应国家及数值,按规范格式输出
原代码待修复问题
- 用户输入的年份默认是字符串类型,未做整数转换,无法和数据集中存储的整数类型年份匹配,筛选逻辑会失效
- 年份筛选、统计逻辑的执行顺序在输出语句之后,运行时会出现变量未定义错误
- 缺失指定年份平均预期寿命计算、年度最高/最低预期寿命提取的核心逻辑
- 存在多余的调试打印语句,会输出冗余的原始数据
补全后完整可运行代码
import csv print("Enter a year to find the average life expectancy for that year: ") input_year = int(input("\nYEAR: ")) # 筛选指定年份的所有数据 def subset_year(all_data, selected_year): year_only = [] for entity, code, year, expectancy in all_data: if year == selected_year: year_only.append((entity, code, year, expectancy)) return year_only def pr_row(headers, row): return ", ".join(f"{label}:{value}" for label, value in zip(headers, row)) data = [] with open(r"C:\Users\X230\Desktop\Python class\life-expectancy.csv") as database: reader = csv.reader(database) # 读取表头 parts = next(reader) for line in reader: entity, code, year, expectancy = line # 年份转整数、预期寿命转浮点数存储 data.append([entity, code, int(year), float(expectancy)]) # 按预期寿命字段取值的排序key函数 def key_year(row): return row[3] # 输出全数据集统计结果 print() print("The overall max life expectancy is: ", pr_row(parts, max(data, key=key_year))) print("The overall min life expectancy is: ", pr_row(parts, min(data, key=key_year))) # 处理指定年份的统计逻辑 year_data = subset_year(data, input_year) if not year_data: print(f"\n未查询到{input_year}年的有效统计数据") else: # 计算年度平均预期寿命 avg_expectancy = sum(row[3] for row in year_data) / len(year_data) # 提取年度最高、最低预期寿命记录 year_max_row = max(year_data, key=key_year) year_min_row = min(year_data, key=key_year) # 按要求格式输出 print(f"\n===== {input_year}年 预期寿命统计 =====") print(f"该年度所有国家平均预期寿命:{avg_expectancy:.2f}岁") print(f"该年度最高预期寿命所属国家:{year_max_row[0]},数值为{year_max_row[3]:.2f}岁") print(f"该年度最低预期寿命所属国家:{year_min_row[0]},数值为{year_min_row[3]:.2f}岁")
代码逻辑说明
- 对用户输入的年份做整数转换,解决类型不匹配导致的筛选失效问题
- 调整执行顺序,先完成数据筛选、统计计算再执行输出
- 增加空数据判断,避免用户输入不存在的年份时触发除零、取max/min的运行报错
- 数值输出保留2位小数,提升可读性
- 移除了原代码中多余的调试打印语句
内容的提问来源于stack exchange,提问作者Anacostia
相关产品推荐
相关产品推荐

