求取CSV文件数据最大值与最小值,无法定位操作错误求助
核心错误原因
绝大多数此类问题都是读取数据时没有将Life expectancy (years)列转换为数值类型,直接使用字符串比较得出了错误结果。
排查要点
- 检查CSV读取编码是否正确,中文内容如果使用默认编码读取会出现乱码,需指定
encoding='utf-8' - 检查目标列是否存在空值,空值会导致最值计算异常,可以先删除空值行再计算
- 确认目标列的数据类型为数值型(整数/浮点数),如果是字符串类型需要先做类型转换
实现方案
方案1:使用pandas处理(推荐)
首先安装依赖:pip install pandas
执行代码:
import pandas as pd # 读取CSV文件,替换为你自己的文件路径 df = pd.read_csv('life_expectancy.csv', encoding='utf-8') # 可选:删除目标列为空的行 df = df.dropna(subset=['Life expectancy (years)']) # 计算全表预期寿命的最值 max_life = df['Life expectancy (years)'].max() min_life = df['Life expectancy (years)'].min() # 如需查看最值对应的完整数据行 max_row = df[df['Life expectancy (years)'] == max_life] min_row = df[df['Life expectancy (years)'] == min_life] # 如需按国家分组计算每个国家的预期寿命最值 grouped_res = df.groupby('Entity')['Life expectancy (years)'].agg(['max', 'min']).reset_index() print(f"全表预期寿命最大值:{max_life}") print(f"最大值对应数据行:\n{max_row.to_string(index=False)}") print(f"全表预期寿命最小值:{min_life}") print(f"最小值对应数据行:\n{min_row.to_string(index=False)}") print(f"各国预期寿命最值统计:\n{grouped_res.to_string(index=False)}")
你给出的示例数据运行后,输出的阿富汗段结果为最大值41.32,最小值27.638,和实际数据一致。
方案2:纯Python内置库实现(无需安装第三方依赖)
import csv life_values = [] full_rows = [] with open('life_expectancy.csv', 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: # 转换为浮点数再参与计算,避免字符串比较错误 life_val = float(row['Life expectancy (years)']) life_values.append(life_val) full_rows.append(row) max_life = max(life_values) min_life = min(life_values) max_row = full_rows[life_values.index(max_life)] min_row = full_rows[life_values.index(min_life)] print(f"全表预期寿命最大值:{max_life}") print(f"最大值对应数据行:{max_row}") print(f"全表预期寿命最小值:{min_life}") print(f"最小值对应数据行:{min_row}")
内容的提问来源于stack exchange,提问作者1onic 1nferno
相关产品推荐
相关产品推荐

