Python读取Excel时如何批量去除文件顶部冗余标题表头?
批量合并带冗余标题行Excel的可行方案
不用手动逐文件删除标题行,pd.read_excel原生支持读取阶段跳过指定行,配合路径遍历就能批量完成清洗+合并,全程不需要修改原始Excel文件。
固定冗余行数场景(12个文件结构一致,优先用这个方案)
- 先数清楚单个样例文件顶部的冗余行总数:比如前2行是无用的大标题、说明文字,真正的列名在第3行,记住这个行数即可
- 遍历存放所有Excel的目标文件夹,读取每个文件时直接传入跳过行参数,最后统一拼接
- 可选新增来源文件列,后续分析时如果发现数据异常可以快速定位到原文件
可直接运行的参考代码:
import pandas as pd from pathlib import Path # 按需修改下面两个配置项 EXCEL_FOLDER_PATH = Path("替换成你存放12个Excel文件的本地文件夹路径") SKIP_ROW_COUNT = 2 # 替换成你实际要跳过的顶部冗余行数,比如前2行无用就填2 df_list = [] # 遍历文件夹下所有xlsx格式文件,如果是xls格式就把glob匹配规则改成*.xls for excel_file in EXCEL_FOLDER_PATH.glob("*.xlsx"): temp_df = pd.read_excel( excel_file, header=SKIP_ROW_COUNT, # 自动跳过前N行,将第SKIP_ROW_COUNT行作为列名 engine="openpyxl" ) temp_df["source_file"] = excel_file.name # 标记数据来源文件 df_list.append(temp_df) # 合并为总数据表,直接用于后续分析 merged_df = pd.concat(df_list, ignore_index=True)
冗余行数不固定的适配方案
如果后续遇到同类型文件但每个文件冗余标题行数不一致,没法写死跳过值,可以通过固定列名匹配表头位置,自动裁剪冗余内容:
def read_excel_with_auto_skip(file_path, mark_column): """ 自动识别表头位置读取Excel :param file_path: Excel文件路径 :param mark_column: 真实表头中一定存在的列名,比如"订单编号""销售额"这类固定字段 """ # 先不指定表头全量读入 raw = pd.read_excel(file_path, header=None, dtype=str) # 定位包含标记列的行索引 header_pos = raw[raw.apply(lambda row: row.str.contains(mark_column, na=False).any(), axis=1)].index[0] # 裁剪冗余行,重新设置列名 cleaned = raw.iloc[header_pos+1:].reset_index(drop=True) cleaned.columns = raw.iloc[header_pos].tolist() return cleaned
调用时只需要传入一个确定存在的真实列名即可,不需要手动数每个文件的冗余行数。
注意:如果读取时遇到合并单元格导致的列名空值问题,可以在读取后用
ffill()补全列名,或者在read_excel里传入usecols参数指定需要读取的列范围,进一步减少无效数据读入。
内容的提问来源于stack exchange,提问作者Islam Ayman Ellawendy
相关产品推荐
相关产品推荐

