如何使用pandas动态处理含不同数量工作表的多个Excel文件
可行实现方案
推荐优先使用字典结构返回所有工作表,无需提前感知工作表数量与名称,调用灵活度最高:
- 核心逻辑:pandas的
pd.read_excel()方法传入sheet_name=None时,会直接返回{工作表名称: 对应DataFrame}的字典对象,你可以在函数内完成所有工作表的统一预处理后直接返回该字典即可。 - 代码示例:
import pandas as pd def process_file(file_path: str) -> dict: # 读取全部工作表 sheet_dict = pd.read_excel(file_path, sheet_name=None) # 可在此处添加对所有工作表的通用处理逻辑 for sheet_name, df in sheet_dict.items(): # 示例预处理:删除全空的行与列 df = df.dropna(how="all", axis=0).dropna(how="all", axis=1) sheet_dict[sheet_name] = df return sheet_dict # 调用示例 excel_path = "测试文件.xlsx" all_sheets = process_file(excel_path) # 后续使用方式: # 1. 按表名取对应数据框:df1 = all_sheets["工作表1"] # 2. 遍历所有工作表批量处理: # for name, df in all_sheets.items(): # print(f"工作表{name}共{len(df)}行数据")
如果不需要关联工作表名称,仅需按Excel内的工作表顺序返回所有数据框,可以返回列表结构:
- 代码示例:
def process_file(file_path: str) -> list: sheet_dict = pd.read_excel(file_path, sheet_name=None) # 按工作表在文件中的顺序返回数据框列表 return list(sheet_dict.values()) # 调用后按索引取数 all_sheets = process_file(excel_path) first_sheet_df = all_sheets[0] second_sheet_df = all_sheets[1]
注意:不推荐动态生成独立变量的实现方式,会污染全局命名空间、提升调试成本,非必要不要使用。如果必须实现,可以通过
globals().update(all_sheets)将字典内的键值对批量写入全局变量,之后即可直接用工作表名作为变量名调用对应数据框。
内容的提问来源于stack exchange,提问作者mikebmassey
相关产品推荐
相关产品推荐

