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

如何拆分Pandas DataFrame中PaddleOCR返回的含置信度文本列?

拆分PaddleOCR返回的元组格式文本与置信度

问题情况

我用PaddleOCR识别图片后得到的DataFrame中,text列是元组格式,每个元素包含识别文本和对应的置信度。尝试用字符串方法(如str.split、lstrip)拆分失败,若不拆分,后续文本清洗会把括号去掉,导致文本和置信度混淆,影响数据处理。

现有代码:

from tqdm import tqdm
import os
import cv2
import re

imgPaths = glob('C:/Users/23573/Desktop/img/*.jpg')

dfs = []
for imgPath in tqdm(imgPaths,desc='Receipt'):   
    _, filename = os.path.split(imgPath) 
    ocr = PaddleOCR(lang='en')   
    result = ocr.ocr(imgPath)
    img_df = pd.DataFrame(result, columns=['bbox','text'])
    print(img_df['text'])

    img_df['img_id'] = filename
    
paddleocr_df = pd.concat(dfs)

当前text列数据格式:

ID                               Text
0                     (7-Eleven Malaysia, 0.9709457)
1                             (Sdn.Bhd., 0.97443557)
2                                (ELEVEn, 0.9140763)
3               (LevelA,Podfum BfockPla, 0.88208693)
4     (No.12Jalan lmbi.55100Kuaia Lumpur, 0.9308618)
5           (#0463 Tmn Me]ur Ampang SEL, 0.94200194)
6                   (Tel No.:60321142463, 0.9128232)
7                   (WELCOME TO 7-ELEVEN, 0.9357082)
8         (18/04/202121:28RCPT01-288319, 0.97587883)
9      (Staff Name: DASHATARAN A/L RAJAM, 0.9589798)
10                   (Coke Vanilla500ml, 0.98303896)
11                                 (3.20, 0.9908478)

未拆分直接清洗的错误结果:

TEXT
7elevenmalaysia09528224
sdnbhd12009405007
eleven0941575   

期望结果:

ID                 TEXT                 conf
0              7-Eleven Malaysia        0.9709457
1              Sdn.Bhd.                  0.97443557
2              ELEVEn                   0.9140763

解决方案

因为text列存储的是元组对象,不是字符串,直接提取元组的两个元素即可,不需要用字符串处理方法。

方法一:构建DataFrame时直接拆分(推荐)

在生成DataFrame阶段就拆分元组,一步到位,同时补上原代码中遗漏的dfs.append(img_df)(否则合并后会得到空DataFrame):

from tqdm import tqdm
import os
import pandas as pd
from paddleocr import PaddleOCR
import glob

imgPaths = glob('C:/Users/23573/Desktop/img/*.jpg')

dfs = []
for imgPath in tqdm(imgPaths,desc='Receipt'):   
    _, filename = os.path.split(imgPath) 
    ocr = PaddleOCR(lang='en')   
    result = ocr.ocr(imgPath)
    # 遍历OCR结果,拆分每个条目里的文本与置信度元组
    processed_data = [[item[0], item[1][0], item[1][1]] for item in result]
    # 直接生成包含bbox、TEXT、conf的DataFrame
    img_df = pd.DataFrame(processed_data, columns=['bbox','TEXT','conf'])
    img_df['img_id'] = filename
    dfs.append(img_df)  # 将当前图片的DataFrame加入列表

paddleocr_df = pd.concat(dfs)

方法二:对已生成的DataFrame拆分

如果已经得到了包含元组text列的DataFrame,可用apply提取元组元素:

# 从元组中提取文本和置信度
paddleocr_df['TEXT'] = paddleocr_df['text'].apply(lambda x: x[0])
paddleocr_df['conf'] = paddleocr_df['text'].apply(lambda x: x[1])
# 可选:删除原text列
paddleocr_df = paddleocr_df.drop('text', axis=1)

处理后即可得到期望的分栏格式,后续文本清洗仅针对TEXT列,不会与置信度混淆。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:01:02