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

如何处理Tabula提取的带多级表头PDF表格,生成目标结构化数据?

解决方案

步骤说明

  1. 提取新列名:从原始DataFrame的第一行获取子表头,作为目标格式的列名。
  2. 移除表头行:删除包含子表头的第一行,避免干扰后续数据处理。
  3. 填充分组标签:将分组标识(A、B)向下填充到其对应的所有数据行,确保每行都关联正确的分组。
  4. 过滤无效行:移除仅包含分组标签的行(即unnanmed1为NaN的行),保留有效数据行。
  5. 重构DataFrame:将数据映射到目标格式的列结构中,完成转换。

完整代码

import pandas as pd
import numpy as np

NaN = np.nan
df = pd.DataFrame({
    'Header': ['subheader1', 'A', 1, 2, 3, 'B', 4, 5, 6],
    'unnanmed1': ['subheader2', NaN, 'aaa', 'ccc', 'eee', NaN, 'ggg', 'iii', 'kkk'],
    'unnamed2': ['subheader3', NaN, 'bbb', 'ddd', 'fff', NaN, 'hhh', 'jjj', 'lll'],
})

# 提取目标列名
new_columns = ['Header'] + df.iloc[0].tolist()

# 删除第一行并重置索引
df = df.drop(index=0).reset_index(drop=True)

# 填充分组标签到对应行
df['Group'] = df['Header'].where(df['unnanmed1'].isna()).ffill()

# 过滤掉仅含分组标签的行
filtered_df = df[~df['unnanmed1'].isna()].reset_index(drop=True)

# 构建符合目标格式的DataFrame
final_df = pd.DataFrame({
    'Header': filtered_df['Group'],
    'subheader1': filtered_df['Header'],
    'subheader2': filtered_df['unnanmed1'],
    'subheader3': filtered_df['unnamed2']
})

print(final_df)

输出结果

Header subheader1 subheader2 subheader3
0      A          1        aaa        bbb
1      A          2        ccc        ddd
2      A          3        eee        fff
3      B          4        ggg        hhh
4      B          5        iii        jjj
5      B          6        kkk        lll

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:51:02