合并Excel工作表时遇TypeError与shape mismatch错误求助
解决Excel多工作表合并的两类Pandas错误
错误原因分析
错误1:TypeError: first argument must be an iterable of pandas objects, you passed an object of type "DataFrame"
用pd.read_excel(..., sheet_name=None)读取文件时,返回的是字典结构——键是工作表名称,值是对应工作表的DataFrame。直接把这个字典传给pd.concat()会触发错误,因为pd.concat默认迭代字典的键(字符串类型),而非字典内的DataFrame对象。
错误2:shape mismatch: objects cannot be broadcast to a single shape
不同工作表的列结构不匹配:要么列数量不一致,要么列名称不对应,导致Pandas无法对齐行数据完成合并。
修复后的代码
import pandas as pd wb_url = r'D:\DA\power query data\Excel Power Query Practice Material\36. Power Query - Append Queries\Append Queries\Yearly Data - Tables - Quick Method.xlsx' # 读取所有工作表,返回{工作表名: DataFrame}的字典 excel_file = pd.read_excel(wb_url, sheet_name=None) # 提取字典中的DataFrame集合进行合并,重置索引并保留原列顺序 combined_df = pd.concat(excel_file.values(), ignore_index=True, sort=False) # 可选:给合并结果添加"来源工作表"列,方便追溯数据来源 dfs_with_source = [] for sheet_name, df in excel_file.items(): df['来源工作表'] = sheet_name dfs_with_source.append(df) combined_df_with_source = pd.concat(dfs_with_source, ignore_index=True, sort=False)
关键说明
excel_file.values():提取字典内所有DataFrame组成可迭代对象,直接解决TypeError问题。ignore_index=True:合并后重置行索引,避免不同工作表的原始索引重复冲突。sort=False:保留各工作表原本的列顺序,不会自动按列名排序。- 若工作表列差异较大,合并后缺失的列会自动填充
NaN,无需额外处理。
内容的提问来源于stack exchange,提问作者Abt
相关产品推荐
相关产品推荐

