遍历多文件夹提取PDF路径与表格数据合并为单个DataFrame求助
调整方案
核心修改点
- 循环外初始化空列表存储每个PDF对应的单行DataFrame,避免循环内反复拼接损耗性能
- 新增PDF表格提取、最大值计算逻辑
- 循环结束后统一用
pd.concat合并所有数据,通过ignore_index=True重置行号,解决行号重复问题
完整可运行代码
import tabula import pandas as pd from pathlib import Path # 存储所有PDF的处理结果 df_list = [] root_path = Path("C:\\Users\\Inspiron\\Desktop\\A\\1\\Biscuits and Crackers") for path in root_path.glob('**/*.pdf'): path_in_str = str(path) print(f"正在处理:{path_in_str}") # 拆分路径获取分类字段 file_split = path_in_str.split("\\")[6:12] # 生成分类字段的单行DataFrame df_meta = pd.DataFrame([file_split], columns=['Category','Brand','SKU','Type','Test','Direction']) # ------------------- 提取PDF表格最大值 ------------------- table_max = None try: # 读取PDF所有页的所有表格,中文乱码可把encoding改为gbk tables = tabula.read_pdf(path_in_str, pages='all', multiple_tables=True, encoding='utf-8') all_numeric = [] for tb in tables: # 仅保留数值型数据,排除文本、空值 numeric_series = tb.apply(pd.to_numeric, errors='coerce').stack() all_numeric.extend(numeric_series.tolist()) if all_numeric: table_max = max(all_numeric) except Exception as e: print(f"处理{path_in_str}表格失败:{str(e)}") # 把最大值加到当前行 df_meta['Table_Max_Value'] = table_max # ------------------------------------------------------------- # 把当前行加入结果列表 df_list.append(df_meta) # 合并所有数据,重置行号 final_df = pd.concat(df_list, ignore_index=True) print(final_df) # 如需导出到Excel可取消注释下行 # final_df.to_excel("PDF汇总结果.xlsx", index=False)
注意事项
- 路径拆分的切片
[6:12]请根据你实际的文件夹层级调整,确保取到的6个元素对应你要的6个分类字段 - 如果PDF表格识别不准,可以给
tabula.read_pdf加lattice=True参数,适合有明确边框的表格
内容的提问来源于stack exchange,提问作者Karthik
相关产品推荐
相关产品推荐

