pandas调用read_excel返回dict无法使用DataFrame方法如何解决
问题根源
pd.read_excel()的sheet_name参数传值格式直接决定返回值类型,规则如下:
- 传单个字符串(sheet名)或整数(sheet从0开始的序号):直接返回对应工作表的
DataFrame对象 - 传列表(哪怕列表只有1个元素)或传
None:返回dict类型,结构为{sheet名: 对应sheet的DataFrame}
你的代码里给sheet_name传了["May"](列表类型),所以返回的是字典。执行print(df)能看到表格内容和行列数,是因为字典中"May"对应的值本身是DataFrame,打印时会渲染DataFrame的内容,但你直接对字典对象调用.head()/.iloc/.loc等DataFrame专属方法,自然会抛出属性不存在的错误。
解决方案
根据你的使用场景二选一即可:
方案1:仅需读取"May"单个工作表
修改读取代码,去掉sheet_name参数值的列表包裹,直接传字符串:
import pandas as pd df = pd.read_excel('report.xlsx', sheet_name="May") # 此时df为标准DataFrame,可正常执行筛选、遍历、索引等操作 print(df.head())
方案2:需要同时读取多个工作表
保留列表传参的写法,通过字典键取出对应工作表的DataFrame即可:
import pandas as pd # 变量名不要用df,避免和后续DataFrame混淆 sheet_map = pd.read_excel('report.xlsx', sheet_name=["May", "其他需要读取的sheet名"]) # 取出May工作表对应的DataFrame df = sheet_map["May"] # 后续正常操作df即可 print(df.iloc[:10, :3])
之前转换方法报错的原因
你之前尝试用from_dict、to_dict等方法做转换时报ValueError: If using all scalar values, you must pass an index,是因为你操作的是存储sheet映射的字典:它的键是sheet名字符串,值是完整的DataFrame对象,不是「列名->列数据序列」的标准DataFrame构造结构,自然无法直接转换,不需要做额外的格式转换,按上述方法取到字典中对应的值就是标准DataFrame。
内容的提问来源于stack exchange,提问作者ana_m
相关产品推荐
相关产品推荐

