如何编写数据摄入程序加载多工作表Excel到Pandas DataFrame?
多Excel多工作表批量加载方案
你的代码思路已经抓住了核心需求,这里给你补充几个实用的优化点和扩展方案,让程序更健壮、更贴合实际分析场景:
核心优化方向
- 安全路径拼接:直接用
folder+file容易出现跨系统路径分隔符问题,换成os.path.join()或pathlib能避免这类低级错误。 - 过滤非Excel文件:
os.listdir会返回文件夹内所有内容,必须筛选.xlsx/.xls/.xlsm格式,避免读取无效文件报错。 - 同结构工作表合并:既然所有文件的工作表结构一致,把同名工作表的数据合并成大DataFrame,后续分析会更高效。
优化后的合并版代码
import os import pandas as pd folder = "specified_path" # 用字典存储每个工作表的合并结果 merged_sheets = {} for filename in os.listdir(folder): # 只处理Excel格式文件 if filename.endswith((".xlsx", ".xls", ".xlsm")): file_path = os.path.join(folder, filename) excel_handler = pd.ExcelFile(file_path) for sheet_name in excel_handler.sheet_names: df = excel_handler.parse(sheet_name) # 添加来源文件标记,方便后续数据溯源 df["source_file"] = filename # 合并同名称工作表数据 if sheet_name in merged_sheets: merged_sheets[sheet_name] = pd.concat([merged_sheets[sheet_name], df], ignore_index=True) else: merged_sheets[sheet_name] = df # 示例:输出第一个工作表的前5行数据 if merged_sheets: sample_df = next(iter(merged_sheets.values())) print(sample_df.head())
保留原文件层级的优化版代码
如果需要维持「文件-工作表」的层级存储结构,只需要在你的原代码基础上补充路径和文件过滤逻辑:
import os import pandas as pd folder = "specified_path" sheet_contents = {} for filename in os.listdir(folder): if filename.endswith((".xlsx", ".xls", ".xlsm")): file_path = os.path.join(folder, filename) data = pd.ExcelFile(file_path) file_data = {} for sheet in data.sheet_names: file_data[sheet] = data.parse(sheet) sheet_contents[filename[:-5]] = file_data
额外提示
如果处理超大Excel文件,建议使用pd.read_excel()的chunksize参数分块读取,避免内存溢出。
内容的提问来源于stack exchange,提问作者Harsh780
相关产品推荐
相关产品推荐

