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

如何合并tabula-py提取PDF表格所得pandas DataFrame中Tag非NaN的多行数据

实现方案

核心处理逻辑分为三步:

  1. 把tabula提取到的多页表格合并为单个DataFrame
  2. 生成分组标识:以Tag列为非空的行作为分组起点,后续属于同一条目的拆分行分配相同的分组ID
  3. 按分组ID聚合,每列的内容用\n拼接,自动过滤空值(NaN)

完整可运行代码

import pandas as pd
import numpy as np
import tabula

# 你原有逻辑
filename='tags.pdf'
tagTableStart=2 #784
tagTableEnd=39 #822
tableHeadings = ['Tag','Item','Length','Description','Value']
pageRange = "%d-%d" % (tagTableStart, tagTableEnd)
print ("Scanning pages %s" % pageRange)
tables = tabula.read_pdf(filename, pages=pageRange)

# 新增合并处理逻辑
# 合并多页提取的表格为单个DataFrame
df = pd.concat(tables, ignore_index=True)
# 统一列名
df.columns = tableHeadings

# 生成分组ID:每遇到非空Tag,分组ID+1,同一条目的拆分行会归属同一个分组
df['group_id'] = df['Tag'].notna().cumsum()

# 定义单列合并规则:过滤空值后转字符串,用换行符拼接
def merge_col(col):
    return '\n'.join(col.dropna().astype(str))

# 按分组聚合得到最终结果
result = df.groupby('group_id').agg(
    Tag=('Tag', merge_col),
    Item=('Item', merge_col),
    Length=('Length', merge_col),
    Description=('Description', merge_col),
    Value=('Value', merge_col)
).reset_index(drop=True)

# 输出验证结果
print(result)

可选优化

如果需要去掉内容里的多余空格、空行,可以把merge_col函数修改为如下实现,自动清理无效空白:

def merge_col(col):
    valid_str = [x.strip() for x in col.dropna().astype(str) if x.strip()]
    return '\n'.join(valid_str)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:02