You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
注册

如何使用Python的for循环批量读取Excel多工作表以减少代码冗余?

嘿,我来帮你搞定这个代码冗余的问题!看起来你已经意识到重复调用pd.read_excel太麻烦了,这确实是个很好的优化点——尤其是还要在多个工作簿里重复这套逻辑,封装和循环绝对是正确的方向。

先说说你之前尝试的代码哪里出问题了:

  • 你用for sheet in data_path_eu_2016循环,但data_path_eu_2016是个文件路径字符串,循环它会逐个遍历字符,这显然不是你想要的;
  • pd.read_excelsheet_name参数如果要传多个工作表,得用列表(比如sheet_name=['PM10 ', 'PM2.5']),而不是直接把多个字符串用逗号隔开,这会导致语法错误。

接下来给你两个层级的解决方案,从单个工作簿简化到多工作簿复用:

1. 单个工作簿的简化:用循环+字典存储数据

首先把需要读取的工作表名称整理成一个列表,然后用循环逐个读取,把结果存在字典里(比单独定义多个变量更易管理):

import pandas as pd

# 定义文件路径和要读取的工作表列表(注意保持和实际sheet名一致,包括空格)
data_eu_2016 = 'C:/Users/julia/OneDrive/Documents/python assignment/2016 data -EU values.xlsx'
target_sheets = ['PM10 ', 'PM2.5', 'O3 ', 'NO2 ', 'BaP', 'SO2 ']

# 用字典存储每个工作表的数据,键是清理后的sheet名(去掉多余空格),值是DataFrame
eu_2016_data = {}
for sheet in target_sheets:
    cleaned_name = sheet.strip()  # 去掉sheet名前后的空格,避免后续调用麻烦
    eu_2016_data[cleaned_name] = pd.read_excel(
        data_eu_2016,
        sheet_name=sheet,
        engine='openpyxl',
        skiprows=6,
        usecols='A:L'
    )

# 调用示例:访问PM2.5的数据
# print(eu_2016_data['PM2.5'])

这样你就不用重复写6遍几乎一样的pd.read_excel了,后续要加新的工作表,只需要在target_sheets列表里加名字就行。

2. 多工作簿复用:封装成函数

既然这套读取逻辑要在多个Excel文件里重复用,最好把它封装成一个函数,这样每次调用只需要传文件路径和工作表列表,彻底消除重复代码:

import pandas as pd

def load_multiple_sheets(file_path, sheet_list, skip_rows=6, use_cols='A:L'):
    """
    读取指定Excel文件中的多个工作表,返回存储DataFrame的字典
    参数:
        file_path: Excel文件的完整路径
        sheet_list: 需要读取的工作表名称列表
        skip_rows: 跳过的行数(默认6)
        use_cols: 需要读取的列范围(默认'A:L')
    返回:
        字典,键是清理后的工作表名称,值是对应的数据DataFrame
    """
    sheet_data = {}
    for sheet in sheet_list:
        cleaned_name = sheet.strip()
        sheet_data[cleaned_name] = pd.read_excel(
            file_path,
            sheet_name=sheet,
            engine='openpyxl',
            skiprows=skip_rows,
            usecols=use_cols
        )
    return sheet_data

# 调用示例1:读取2016 EU数据
data_eu_2016 = 'C:/Users/julia/OneDrive/Documents/python assignment/2016 data -EU values.xlsx'
eu_sheets = ['PM10 ', 'PM2.5', 'O3 ', 'NO2 ', 'BaP', 'SO2 ']
eu_2016_data = load_multiple_sheets(data_eu_2016, eu_sheets)

# 调用示例2:读取其他工作簿(比如2017 EU数据)
data_eu_2017 = '你的2017年数据文件路径.xlsx'
eu_2017_data = load_multiple_sheets(data_eu_2017, eu_sheets)

这样不管你有多少个类似的Excel文件,只需要两行代码就能完成读取,后续如果要调整读取规则(比如改skiprows或者usecols),只需要修改函数参数或者调用时传新的参数即可,非常灵活。

内容的提问来源于stack exchange,提问作者Julia Micallef Filletti

火山引擎 最新活动