如何用pandas read_excel将多行合并为列名,无需手动指定names
解决方案
可以通过read_excel的header参数配合后续列名处理实现,无需手动用names设置列名,分两种场景处理:
场景1:直接得到列名B、C、D、E、F、G(省略A列相关表头)
如果第二行表头已经包含B、C、D、E、F、G,仅需指定读取第二行为表头,再剔除A列即可:
import pandas as pd # 指定第二行为表头(索引从0开始,header=1对应第二行) df = pd.read_excel("your_file.xlsx", header=1) # 删除A列 df = df.drop(columns=["A"])
如果原文件是两级表头(两行表头),可以先读取多级表头,再合并后筛选目标列:
import pandas as pd # 读取两行作为多级表头 df = pd.read_excel("your_file.xlsx", header=[0, 1]) # 合并多级表头为单级(过滤空值避免冗余) df.columns = ["_".join(filter(None, col)) for col in df.columns] # 仅保留目标列 df = df[["B", "C", "D", "E", "F", "G"]]
场景2:给B、C、D列添加A列表头作为前缀(如A_B、A_C、A_D)
先读取两级表头,再根据A列的第一行表头为B、C、D列添加前缀,E、F、G列保持原名:
import pandas as pd # 读取两行作为多级表头 df = pd.read_excel("your_file.xlsx", header=[0, 1]) # 获取A列的第一行表头作为前缀 prefix = df.columns[0][0] # 处理列名 new_columns = [] for col in df.columns: if col[1] in ["B", "C", "D"]: new_columns.append(f"{prefix}_{col[1]}") elif col[1] in ["E", "F", "G"]: new_columns.append(col[1]) # 跳过A列相关的列 else: continue df.columns = new_columns # 确保只保留目标列 df = df[[col for col in df.columns if col in [f"{prefix}_B", f"{prefix}_C", f"{prefix}_D", "E", "F", "G"]]]
内容的提问来源于stack exchange,提问作者Nikolai Savulkin
相关产品推荐
相关产品推荐

