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

如何用Python高效解析PDF中的多层级表格(基于Tabula)

如何用Tabula高效提取PDF表格并避免单元格合并?
  • 待解析表格为Marshalls plc 2023年度报告第92页的表格,目标是将其提取为符合指定CSV结构的DataFrame,允许用上下子表头填充NaN值。
  • 当前使用Tabula库提取时遇到单元格合并问题:比如第1行(从零开始计数)的第5个元素本应为'MIP A'和'MIP B'两个独立单元格,却被合并成了'MIP A MIP B';正常每行(含首列高管姓名)应包含19个元素,但当前代码输出每行仅10个元素。

当前使用的代码:

import tabula

dfs = tabula.read_pdf(doc, pages='94')     # multiple_tables=True
dfs

row_number = 1   # Row number you want to access (zero-based)

# Iterate over each DataFrame in the list and access a specified row of actual data
for i, df in enumerate(dfs):
    if not df.empty:  # Ensure DataFrame is not empty
        if len(df) > row_number:  # Check if DataFrame has enough rows
            specified_row = df.iloc[row_number]  # Access the specified row of data
            print(f"Data from row {row_number + 1} in Table {i+1}:")
            print(specified_row.values)  # Print only the values from the specified row
            print(f"\nNumber of elements in row {row_number + 1} of Table {i+1}: {len(specified_row.values)}")
        else:
            print(f"Table {i+1} does not contain row {row_number + 1}.")
    else:
        print(f"Table {i+1} is empty.")

补充说明:需要方案能自动识别单元格边界、适配其他表格,因此以下针对特定内容的拆分方法不可行:

def split_specific_items(row_values):
    updated_values = []
    for item in row_values:
        if item == 'MIP A MIP B':
            updated_values.extend(['MIP A', 'MIP B'])
        else:
            updated_values.append(item)
    return updated_values

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 15:43:25