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

如何用Pandas合并同文件内首表有表头其余无表头的Excel工作表?

使用Pandas合并Excel多工作表为单个DataFrame

需求:将一个Excel文件的所有工作表合并为单个DataFrame,其中第一个工作表包含表头,其余工作表仅含数据行(无表头)。

第一个工作表样式:包含表头行与数据行;其余工作表样式:仅包含数据行,无表头。

你给出的实现代码:

df = pd.read_excel('filename.xls', header=None, sheet_name=None)
df1 = pd.concat(df).reset_index(drop=True)
df1.columns = df1.iloc[0,:]

更简便且严谨的实现方式

原代码存在小疏漏:设置列名后,原第一个工作表的表头行仍会留在数据中,需要额外步骤删除。可以拆分读取逻辑,直接复用首表的表头,避免冗余操作:

方法一:分步清晰版

import pandas as pd

# 读取所有工作表,返回格式为{表名: DataFrame}的字典
all_sheets = pd.read_excel('filename.xls', sheet_name=None)
sheet_list = list(all_sheets.values())

# 提取首表的表头
header = sheet_list[0].columns

# 合并所有表:首表直接用,其余表指定表头后合并
final_df = pd.concat(
    [sheet_list[0]] + [sheet.set_axis(header, axis=1) for sheet in sheet_list[1:]],
    ignore_index=True
)

方法二:紧凑一行版

import pandas as pd

all_sheets = pd.read_excel('filename.xls', sheet_name=None)
final_df = pd.concat(
    [df if idx == 0 else df.set_axis(list(all_sheets.values())[0].columns, axis=1)
     for idx, df in enumerate(all_sheets.values())],
    ignore_index=True
)

原代码的优化补充

如果要保留原代码的思路,需要加上删除冗余表头行的步骤:

df = pd.read_excel('filename.xls', header=None, sheet_name=None)
df1 = pd.concat(df).reset_index(drop=True)
df1.columns = df1.iloc[0,:]
# 移除重复的表头行
df1 = df1[1:].reset_index(drop=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:16:10