pandas循环读取Excel工作表后以表名直接命名DataFrame的方法
问题
从多工作表Excel文件批量读取DataFrame时,希望直接用工作表名作为变量名调用数据,无需通过字典键索引,现有基于字典存储的代码如下:
import pandas as pd excel = 'sample.xlsx' xls = pd.ExcelFile(excel) d = {} for sheet in xls.sheet_names: print(sheet) d[f'{sheet}'] = pd.read_excel(xls, sheet_name=sheet)
场景约束:Excel包含至少50个工作表,后续工作表数量会持续增加,不适合手动逐个给变量赋值。
回答
方法一:动态注册全局变量(满足直接用变量名调用的需求)
通过globals()修改全局命名空间,循环读取时直接把工作表名作为变量名绑定对应的DataFrame,不需要提前定义变量,工作表数量增减时无需修改代码:
import pandas as pd excel = 'sample.xlsx' xls = pd.ExcelFile(excel) for sheet in xls.sheet_names: print(sheet) globals()[sheet] = pd.read_excel(xls, sheet_name=sheet)
运行后直接输入alpha、beta、charlie即可访问对应DataFrame。
注意:该方法要求工作表名符合Python变量命名规则(不能以数字开头、不能包含空格/运算符等特殊字符、不能和Python内置关键字重名),否则会抛出命名错误。
方法二:保留字典存储(工程场景优先推荐)
字典是批量加载异构数据的最优存储方式,相比散落在全局命名空间的独立变量,字典更方便做批量遍历、统一清洗、异常排查,也不会出现变量名冲突的问题。如果觉得字典索引麻烦,仅需要把高频使用的表单独赋值即可:
# 读取逻辑保留原字典实现即可 import pandas as pd excel = 'sample.xlsx' xls = pd.ExcelFile(excel) d = {} for sheet in xls.sheet_names: d[sheet] = pd.read_excel(xls, sheet_name=sheet) # 仅把常用的表单独解包为独立变量 alpha = d['alpha'] beta = d['beta'] # 批量处理所有表时直接遍历字典,不用逐个找变量 for sheet_name, df in d.items(): # 在这里写统一的数据处理逻辑,比如去重、格式转换 pass
如果确认所有工作表名都是合法变量名,也可以直接把字典批量更新到全局命名空间,效果和方法一完全一致:
globals().update(d)
内容的提问来源于stack exchange,提问作者E_Ri
相关产品推荐
相关产品推荐

