如何用Pandas实现多Excel多工作表数据摄入并单独存储各表?
优化Excel数据摄入程序:按文件-工作表层级管理DataFrame
你当前的代码会把每个Excel文件的所有工作表合并成单个DataFrame存入列表,没法区分同文件内的不同工作表。要实现按文件访问、每个工作表独立成DataFrame的需求,最适合用嵌套字典的结构——外层用文件名(不含后缀)做键,内层用工作表名做键,对应的值就是该工作表的DataFrame。
下面是优化后的代码,同时解决了路径兼容性、数据溯源的问题:
import pandas as pd from pathlib import Path # 用pathlib处理路径,跨平台更可靠 folder = Path('specified_path') # 过滤出文件夹里的Excel文件(避免非Excel文件干扰) excel_files = [f for f in folder.iterdir() if f.suffix in ['.xlsx', '.xls', '.xlsm']] # 构建嵌套字典:{文件名: {工作表名: DataFrame}} file_sheet_dfs = {} for file in excel_files: # 读取当前文件的所有工作表,返回的是{工作表名: DF}的字典 sheet_dfs = pd.read_excel(file, sheet_name=None) # 给每个工作表的DF添加文件名和工作表名字段,方便溯源 for sheet_name, df in sheet_dfs.items(): df['excel_file'] = file.stem # 文件名(不含后缀) df['sheet_name'] = sheet_name # 将当前文件的工作表字典存入外层字典 file_sheet_dfs[file.stem] = sheet_dfs
关键优化点说明:
- 路径处理:用
pathlib.Path替代字符串拼接路径,自动适配Windows/macOS/Linux的路径分隔符,避免\转义或跨平台报错的问题 - 数据结构:直接利用
pd.read_excel(sheet_name=None)返回的工作表字典,不用先合并再拆分,完整保留原有的工作表层级关系 - 数据溯源:给每个DataFrame添加
excel_file和sheet_name字段,后续分析时能快速定位数据来自哪个文件的哪个工作表 - 文件过滤:只读取后缀为
.xlsx/.xls/.xlsm的文件,避免误读其他类型文件
额外优化建议:
- 异常处理:如果文件夹里可能存在损坏的Excel文件,可以给读文件的逻辑加
try-except,避免单个文件出错导致整个程序中断:for file in excel_files: try: sheet_dfs = pd.read_excel(file, sheet_name=None) # ...后续处理... file_sheet_dfs[file.stem] = sheet_dfs except Exception as e: print(f"读取文件{file.name}出错: {e}") - 内存优化:如果Excel文件很大,可以指定
usecols参数只读取需要的列,减少内存占用:sheet_dfs = pd.read_excel(file, sheet_name=None, usecols=['列1', '列2', '列3'])
内容的提问来源于stack exchange,提问作者Harsh780
相关产品推荐
相关产品推荐

