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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:03:29