使用Tabula将PDF转换为Excel时Pandas DataFrame创建报错求助
使用Tabula将PDF转换为Excel时Pandas DataFrame创建报错求助
嘿,我看你遇到的问题根源在于对Tabula返回结果的处理方式不对哦!
当你用multiple_tables=True调用tabula.read_pdf()时,它返回的是一个包含多个Pandas DataFrame的列表,而不是单个可以直接转换为DataFrame的数据集。你直接把这个列表传给pd.DataFrame(),Pandas会因为列表里的每个元素都是不同形状的DataFrame,无法生成一个结构均匀的数组,所以才抛出了那个ValueError: setting an array element with a sequence...的错误。
给你两个针对性的解决方案,根据你的需求选就行:
方案一:把所有表格合并成一个Excel工作表(适合表格结构一致的情况)
如果PDF里的所有表格列名、结构都差不多,可以用pd.concat()把它们合并成一个大的DataFrame,再保存:
import tabula import pandas as pd # 你的PDF路径 path = "C:/Users/Littl/OneDrive/Área de Trabalho/app/pdf/notafiscal.pdf" # 读取所有页面的多个表格,得到DataFrame列表 pdf_tables = tabula.read_pdf(path, pages='all', multiple_tables=True) # 合并所有表格,ignore_index=True重置行号 combined_df = pd.concat(pdf_tables, ignore_index=True) # 输出路径要加上文件名哦,你之前的路径只是文件夹,会报错! output_path = "C:/Users/Littl/OneDrive/Área de Trabalho/app/pdf/notafiscal.xlsx" combined_df.to_excel(output_path, index=False) print("Done")
方案二:每个表格存到Excel的不同工作表(适合表格结构不一致的情况)
如果PDF里的表格结构差异很大,分开存到不同工作表更合理:
import tabula import pandas as pd path = "C:/Users/Littl/OneDrive/Área de Trabalho/app/pdf/notafiscal.pdf" pdf_tables = tabula.read_pdf(path, pages='all', multiple_tables=True) output_path = "C:/Users/Littl/OneDrive/Área de Trabalho/app/pdf/notafiscal.xlsx" # 创建Excel写入器,把每个表格写入不同工作表 with pd.ExcelWriter(output_path) as writer: for table_idx, table in enumerate(pdf_tables): # 工作表命名为"表格1"、"表格2"...这样的格式 table.to_excel(writer, sheet_name=f"表格{table_idx+1}", index=False) print("Done")
另外注意一个小细节:你之前的pdf_out_xlsv变量只写了文件夹路径,没有具体的文件名(比如notafiscal.xlsx),这样保存的时候也会报错,上面的代码里已经帮你修正了这个问题~
如果合并后出现很多空值,说明表格结构不一致,这时候建议用方案二,或者先手动检查每个表格的列名,做一些预处理再合并。
备注:内容来源于stack exchange,提问作者meaculapa
相关产品推荐
相关产品推荐

