如何用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
相关产品推荐
相关产品推荐

