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

使用Tabula读取PDF转DataFrame时仅显示部分行的问题求助

解决Tabula读取多页PDF转DataFrame仅显示部分行的问题

问题根源

tabula.read_pdf(pdf_file, pages='all', lattice=True)返回的是多个DataFrame的列表(每一页对应一个DataFrame)。直接用pd.DataFrame()包裹这个列表时,Python会把每个子DataFrame当作单列的一行数据,导致你看到的“部分行”其实是每个页面的DataFrame条目,而非合并后的完整表格数据。

解决方案

需要把列表里的所有DataFrame合并成一个完整的DataFrame,同时复用第一页的列标题给后续页面:

1. 读取所有页面的表格数据

import tabula
import pandas as pd

# 读取多页表格,得到DataFrame列表
dfs = tabula.read_pdf(pdf_file, pages='all', lattice=True)

2. 统一列名并合并数据

  • 第一页的DataFrame已经有正确的列名,直接保留
  • 后续页面的DataFrame没有列名,用第一页的列名替换,再合并所有数据
# 提取第一页的列名
col_names = dfs[0].columns

# 处理后续页面的数据
processed_list = [dfs[0]]
for df in dfs[1:]:
    # 给后续页面设置列名
    df.columns = col_names
    # 可选:如果后续页面有重复的表头行,过滤掉(比如判断首列是否等于列名)
    df = df[df.iloc[:, 0] != col_names[0]]
    processed_list.append(df)

# 合并所有页面的数据
final_df = pd.concat(processed_list, ignore_index=True)

3. 验证结果

现在final_df就是包含所有页面数据、列名统一的完整DataFrame,不会再出现仅显示部分行的问题。

额外提示

  • 如果后续页面的表格结构和第一页完全一致,上述代码可直接使用;若结构有差异,需针对性处理对应页面的DataFrame
  • 若表格无网格线,可尝试将lattice=True替换为stream=True来优化提取效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:10:29