使用Tabula导出PDF为CSV时缺失最后一列Quantidade,求解决方案
解决Tabula导出PDF表格缺失最后一列的问题
针对你遇到的Tabula导出CSV缺失“Quantidade”列的问题,可尝试以下几种方案:
1. 调整提取区域,确保覆盖完整表格
Tabula默认的提取区域可能未包含页面边缘的最后一列,你可以通过area参数手动指定覆盖整个页面的坐标(PDF页面坐标以左下角为原点,单位为点,标准A4页面尺寸为高792点、宽612点):
tabula.convert_into( "https://up2dataweb.blob.core.windows.net/bdi/BDI_03-2_20231124.pdf", "outputopcoes.csv", output_format="csv", pages=291, area=[0, 0, 792, 612] )
若不确定精确坐标,可先用tabula.gui()打开Tabula可视化工具,手动框选完整表格区域后,复制生成的坐标参数到代码中。
2. 手动指定列边界
如果表格列的分隔位置明确,通过columns参数定义每一列的垂直分隔线坐标,能强制Tabula识别到最后一列:
tabula.convert_into( "https://up2dataweb.blob.core.windows.net/bdi/BDI_03-2_20231124.pdf", "outputopcoes.csv", output_format="csv", pages=291, columns=[10, 80, 150, 220, 290, 360, 430, 500, 570, 610] # 根据实际列位置调整坐标 )
坐标值需对照PDF表格的实际布局调整,同样可通过Tabula GUI工具获取准确的列分隔坐标。
3. 切换到Stream模式提取
如果表格是文本流式布局而非网格线布局,默认的lattice模式识别精度可能不足,切换到stream模式(配合guess=False)能更精准地识别文本列:
tabula.convert_into( "https://up2dataweb.blob.core.windows.net/bdi/BDI_03-2_20231124.pdf", "outputopcoes.csv", output_format="csv", pages=291, stream=True, guess=False, columns=[10, 80, 150, 220, 290, 360, 430, 500, 570, 610] )
4. 优化Pandas读取逻辑
导出CSV后,先查看原始数据结构,避免误删目标列:
# 先查看原始CSV的结构 df_raw = pd.read_csv('outputopcoes.csv') print(df_raw.head()) # 根据实际结构调整处理逻辑,不要提前删除Unnamed列,先确认哪一列对应Quantidade df = df_raw.rename(columns=df_raw.iloc[0]).iloc[2:] # 检查列名是否包含Quantidade print(df.columns)
若导出的CSV中最后一列以Unnamed开头,可直接将其重命名为Quantidade,而非直接删除。
内容的提问来源于stack exchange,提问作者Dicast
相关产品推荐
相关产品推荐

