You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:54:23