pandas for循环遍历Excel多表 如何分表独立统计指定国家污染值
问题根源定位
- 读取逻辑缺失:原代码的
pd.read_excel没有指定要读取的工作表,默认仅加载Excel文件的第一个工作表,后续循环遍历6个表名的过程中,从未切换读取的数据源,始终在重复计算第一个表的数值 - 累加逻辑错误:累计求和的变量
resultM1定义在工作表循环的外部,所有工作表的计算共用同一个计数器,切换工作表时没有重置计数,最终输出的是多轮重复累加得到的全局总和,完全不是单表的统计值
修正代码实现
调整核心逻辑,同时替换低效的逐行遍历写法,提升运行效率:
import pandas as pd excel_path = 'C:/Users/julia/OneDrive/Documents/python assignment/2016 data -EU values.xlsx' # 注意保留原表名中的尾随空格,避免读取Excel时找不到对应工作表 target_sheets = ["PM10 ", "PM2.5", "O3 ", "NO2 ", "BaP", "SO2"] # 预存统计结果,后续绘图可直接调用 stats_dict = {} for sheet in target_sheets: # 每次循环加载当前对应的独立工作表数据 df = pd.read_excel(excel_path, sheet_name=sheet, skiprows=6) # 直接筛选马耳他的行,对污染水平列求和,无需逐行遍历 malta_sum = df.loc[df['Country'] == 'Malta', 'AirPollutionLevel'].sum() # 去掉表名的尾随空格做键,匹配预期的输出格式 clean_sheet_name = sheet.strip() stats_dict[clean_sheet_name] = malta_sum # 逐表输出统计结果 print(f"{clean_sheet_name} {malta_sum:.0f}")
实现效果说明
修正后的代码会完全匹配你预期的输出形式:
PM10 142
PM2.5 53
O3 21
NO2 3
BaP 21
SO2 32
同时预存在stats_dict里的结果可以直接用于后续绘图,无需重复读取Excel文件。
注意:保留原表名中的尾随空格是因为你提供的表名列表里部分条目(如"PM10 "、"O3 ")存在尾随空格,如果和Excel内实际的工作表名不匹配,pd.read_excel会报错,只需要确保列表里的表名和Excel内的实际名称完全一致即可。
内容的提问来源于stack exchange,提问作者Julia Micallef Filletti
相关产品推荐
相关产品推荐

