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

创建pandas DataFrame触发ValueError: Buffer维度错误(期望1维,实际2维)

问题根因

你的代码存在3个核心问题,直接触发维度报错:

  • pd.read_excel传入sheet_name=None时,返回结果是字典结构,不是单个DataFrame:字典的key是工作表名称,value是对应工作表的DataFrame对象。你直接把这个字典传入pd.DataFrame()构造器,本身就不符合入参规范。
  • 变量名拼写不一致:你定义新DataFrame时用的变量名是f1,后续转数组时写的是df1,就算前面逻辑正确,这行也会触发名称错误。
  • 强行指定不匹配的索引:你给新构造的DataFrame传index=[0],相当于声明新表只有1行数据,但你读取的原始数据有124412行,维度完全不匹配;加上传入的是字典(值为2维的DataFrame),pandas会尝试把每个2维的value当成1维序列解析,最终抛出「期望1维结构,实际拿到2维」的错误。
  • 多余的嵌套操作:你不需要把读取到的内容再套一层pd.DataFrame(),只要读取逻辑正确,直接调用.to_numpy()就能拿到目标numpy数组,做后续单元素操作。
修正方案

分两种常见使用场景给出可运行代码:

场景1:只需要读取单个工作表

去掉sheet_name=None参数,默认读取第一个工作表,或者传入具体工作表名指定读取目标,不需要额外套一层DataFrame构造:

import pandas as pd
import numpy as np

cols = 'A, AO, BB, BC'
# 读取指定列,默认读工作簿第一个工作表
df = pd.read_excel(path_to_excel, usecols=cols)
# 直接转为numpy数组,得到形状为(124412, 4)的数组
data_arr = df.to_numpy()

# 后续可直接按索引操作单个元素,比如取第10行第2列的元素
# val = data_arr[9, 1]

场景2:需要读取工作簿内所有工作表

遍历sheet_name=None返回的字典,逐个处理每个工作表的数据即可:

import pandas as pd
import numpy as np

cols = 'A, AO, BB, BC'
# 读取所有工作表,返回{工作表名: 对应DataFrame}的字典
all_sheet_dict = pd.read_excel(path_to_excel, sheet_name=None, usecols=cols)
# 遍历处理每个表
for sheet_name, df in all_sheet_dict.items():
    data_arr = df.to_numpy()
    # 针对当前表的数组做单元素操作即可

内容的提问来源于stack exchange,提问作者user9228288

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:09:22