Python中如何通过字典遍历for循环加载多个pandas DataFrame?
错误原因
- 直接遍历字典默认只会迭代字典的键,要同时获取键和值需要调用字典的
.items()方法,这是你遇到「值太多无法解包」报错的根本原因:每次循环只拿到了单个字符串类型的键,无法拆分为name、link两个变量。 - 即使修复遍历逻辑,直接写
name = pd.read_excel(...)也无法生成q1、q2、q3命名的变量:这里的name是循环局部变量,每次循环都会覆盖上一次的赋值,最终只会保留最后一次循环的结果,且变量名为name而非你预期的键名。
解决方案
方案1(更推荐):用字典统一存储所有DataFrame
这种方式不会污染全局命名空间,后续要批量处理所有DataFrame时也更方便,示例代码如下:
import pandas as pd data = {'q1':'q1data.xlsx','q2':'q2data.xlsx','q3':'q3data.xlsx'} # 初始化空字典存储结果,键为q1/q2/q3,值为对应的DataFrame dfs = {} for name, link in data.items(): dfs[name] = pd.read_excel(link, sheet_name=0, header=0)
使用时直接通过dfs['q1']、dfs['q2']即可调用对应的DataFrame。
方案2:生成独立的q1/q2/q3全局变量
如果确实需要直接使用q1、q2、q3作为变量名,可以通过修改全局命名空间实现,示例代码如下:
import pandas as pd data = {'q1':'q1data.xlsx','q2':'q2data.xlsx','q3':'q3data.xlsx'} for name, link in data.items(): globals()[name] = pd.read_excel(link, sheet_name=0, header=0)
运行后即可直接调用q1、q2、q3变量获取对应DataFrame。
内容的提问来源于stack exchange,提问作者Sean R
相关产品推荐
相关产品推荐

