从单张Excel表提取多Table转为DataFrame并合并的技术求助
解决方案:Excel多Table转DataFrame并合并
基于你已有的分组代码,接下来可以按以下步骤完成Table转DataFrame及合并操作:
步骤1:按分组提取表头与数据
利用已生成的group_id,将每个分组内的第一行作为表头,剩余行作为数据内容。
步骤2:逐个分组转换为DataFrame
遍历每个分组,将表头设为列名,数据行转为DataFrame,可按需保留分组标识用于后续溯源。
步骤3:合并所有DataFrame
使用pd.concat合并所有DataFrame,自动处理列名匹配与不匹配的情况,不匹配列会填充NaN。
完整代码
import pandas as pd # 读取Excel文件(沿用你的初始代码) sheets = pd.read_excel(r"D:\PO-1473-Scaff-June22efff.xlsx", header=None) sheets.dropna(axis=1, how="all", inplace=True) sheets.dropna(subset=[2], inplace=True) sheets["group_id"] = (sheets[0] == "SN").cumsum() # 存储所有分组的DataFrame dfs = [] # 遍历每个分组 for group_id, group_data in sheets.groupby("group_id"): # 提取表头(分组内第一行) header = group_data.iloc[0].tolist() # 提取数据行(分组内除第一行外的所有行) data_rows = group_data.iloc[1:] # 转换为DataFrame并设置列名 df = pd.DataFrame(data_rows.values, columns=header) # 可选:添加分组ID列,方便后续溯源 df["group_id"] = group_id dfs.append(df) # 合并所有DataFrame final_df = pd.concat(dfs, ignore_index=True) # 查看合并结果 print(final_df.head())
关键说明
- 分组内第一行被识别为表头的前提是:每个Table的起始行第一列值为
SN(与你设置group_id的逻辑一致) pd.concat会自动对齐相同列名,不同列名的字段会保留并填充NaN,适配部分匹配列的场景- 若需对不匹配列做特殊处理(比如填充默认值),可在合并后使用
final_df.fillna()操作
内容的提问来源于stack exchange,提问作者Ali khan
相关产品推荐
相关产品推荐

