Pandas如何将含多个同结构sheet的Excel合并为单个DataFrame
Pandas 批量合并同结构多工作表Excel最优方案
核心实现逻辑
利用pandas原生的多工作表批量读取能力,避免逐表重复IO开销,在合并时补充受访者标识字段,适配后续所有统计需求。
具体实现代码
1. 依赖导入与全表读取
直接指定sheet_name=None参数,pandas会一次性读取文件内所有工作表,返回结构为{工作表名称: 对应工作表DataFrame}的字典,相比手动循环调用read_excel读取单个sheet,减少了重复的文件IO开销,性能更优。
import pandas as pd # 替换为你的xlsx文件实际路径 file_path = "your_respondent_data.xlsx" # 读取所有工作表 sheet_dict = pd.read_excel(file_path, sheet_name=None)
2. 工作表合并与字段补充
遍历读取到的工作表字典,从工作表名中提取受访者姓名,为每个工作表的DataFrame新增受访者标识列,最后通过pd.concat做纵向合并,因为所有工作表列结构完全一致,合并过程不会出现字段错位问题。
merged_df_list = [] for sheet_name, df in sheet_dict.items(): # 从sheet名提取受访者姓名,例:sheet1-Andres → Andres respondent_name = sheet_name.split("-")[-1] # 新增受访者标识列 df["respondent"] = respondent_name merged_df_list.append(df) # 合并为单个DataFrame,重置索引 final_df = pd.concat(merged_df_list, ignore_index=True)
3. 统计示例
按照需求统计Answer A列的0、1取值总数量,直接调用value_counts即可:
# 统计Answer A列0和1的总数 answer_a_dist = final_df["Answer A"].value_counts() print(answer_a_dist)
如果需要按受访者维度拆分统计,可直接分组计算:
# 分受访者统计Answer A的取值分布 answer_a_by_respondent = final_df.groupby("respondent")["Answer A"].value_counts()
方案优势
- 性能更高:原生批量读逻辑避免了重复打开文件的IO开销,工作表数量越多,性能优势越明显
- 扩展性强:无需提前指定工作表数量或名称,文件内新增/减少受访者工作表时不需要修改代码
- 适配后续分析:保留了受访者来源字段,支持全局统计、分人群统计等多维度计算需求
如果工作表表头存在偏移、空行等格式问题,可在
read_excel中传入header、skiprows等参数调整读取规则即可,适配绝大多数非标准格式的Excel文件。
内容的提问来源于stack exchange,提问作者math_guy_shy
相关产品推荐
相关产品推荐

