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

如何拆分列表多组数据并追加至Pandas DataFrame下方(Python)

问题描述

我用Python代码从PDF中提取采购订单号(PO)、Item、交货日期(Data)和文件名,但单个PDF包含多组数据时,生成的列表是嵌套结构,导入Pandas DataFrame后单元格会包含多组数据。需要拆分这些嵌套数据,按顺序追加到对应行下方,让每组数据单独占一行。

原代码如下:

lista_Pedido = []

lista_Data = []

lista_Item = []

nome_arquivo = []

for f in os.listdir():

    col_3 = [f]

    nome_arquivo.append(col_3)
    
    reader = PdfReader(f)
    page = reader.pages[0]
    pdf_atual = page.extract_text(f)
    
    col_1 = re.findall(r'\w+(?<=PO: 45)\d+',pdf_atual)
    lista_Pedido.append(col_1)
    
    col_12= re.findall(r'(?<=Item )\d+',pdf_atual)
    lista_Item.append(col_12)
    
    col_2 = re.findall(r'[?<=(Date of delivery:  )|?<=(Data de fornecimento:  )]\s+\d+/+\d+/+\d+',pdf_atual)
    lista_Data.append(col_2)


df = pd.DataFrame(data=(), columns=['Pedido','Item','Data'])

df['Item'] = (lista_Item)
      

df['Data'] = (lista_Data)

df['arquivo'] = (nome_arquivo)
解决方案

修改后的代码会逐个处理每个PDF内的多组数据,确保每组PO、Item、Data和文件名对应单独一行:

import os
import re
import pandas as pd
from pdfreader import PdfReader

# 初始化存储单条数据的空列表
lista_Pedido = []
lista_Data = []
lista_Item = []
nome_arquivo = []

for f in os.listdir():
    # 仅处理PDF文件,避免非PDF文件干扰
    if not f.endswith('.pdf'):
        continue
        
    reader = PdfReader(f)
    page = reader.pages[0]
    pdf_atual = page.extract_text()
    
    # 提取当前PDF中的所有目标数据
    pos = re.findall(r'\w+(?<=PO: 45)\d+', pdf_atual)
    items = re.findall(r'(?<=Item )\d+', pdf_atual)
    datas = re.findall(r'(?<=Date of delivery:  |Data de fornecimento:  )\s+\d+/\d+/\d+', pdf_atual)
    
    # 补全长度不一致的列表,避免数据错位
    max_len = max(len(pos), len(items), len(datas))
    pos += [''] * (max_len - len(pos))
    items += [''] * (max_len - len(items))
    datas += [''] * (max_len - len(datas))
    
    # 逐个追加数据,每组数据对应一行
    for po, item, data in zip(pos, items, datas):
        lista_Pedido.append(po.strip())
        lista_Item.append(item.strip())
        lista_Data.append(data.strip())
        nome_arquivo.append(f)

# 生成最终DataFrame
df = pd.DataFrame({
    'Pedido': lista_Pedido,
    'Item': lista_Item,
    'Data': lista_Data,
    'arquivo': nome_arquivo
})
关键改动说明
  • 新增PDF文件过滤:只处理.pdf后缀文件,避免遍历到非PDF文件引发错误
  • 拆分嵌套数据:不再将单个PDF的多组数据作为嵌套列表追加,而是通过zip逐个取出每组数据,分别追加到总列表,确保每组数据单独占一行
  • 数据对齐处理:用max_len补全长度不一致的列表,避免zip截断数据,保证PO、Item、Data一一对应
  • 清理冗余空格:对提取的字符串执行strip()操作,去除不必要的空白字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:45:42