创建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
相关产品推荐
相关产品推荐

