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

使用Tabula-py提取PDF表格时,如何将Unicode转为UTF-8/ASCII字符串?

解决Tabula-py提取PDF表格返回Unicode格式数据的问题

问题场景

使用Tabula-py提取PDF表格时,工具可正确识别表格结构,但提取出的数据显示为Unicode编码格式(如\uXXXX形式),而非正常可读字符串。使用的代码如下:

from tabula import read_pdf
df = read_pdf('https://watermark.silverchair.com/fsab153.pdf?token=AQECAHi208BE49Ooan9kkhW_Ercy7Dm3ZL_9Cf3qfKAc485ysgAAAs0wggLJBgkqhkiG9w0BBwagggK6MIICtgIBADCCAq8GCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMOXfntjWl9L87SyaXAgEQgIICgMSxXbyEzl4Y3sDeaGncgcE9V93d46LWUAnMiKz0KtHAKJA1HpPuefZZzrhJlD_hNUzK9C4uWwF1EfAbe0aWG3c_sFLetD5kqOWXzuGARvCRWOvmAEKpgtx0Desj5MY9lH7Zp7XxbfLBLScOIK6X_qEZ3Low6GkQfm1iBCbVHUg9ueKxLaYghX--uHPqmx43RZHk8bAjoDdMDT9lPsVXqlZJkmS2UT6T3uzC1jPTz3eON93C5CaEpW4lG_zvzMMltlZZm04Zz1vWd7WsXa_Gvc1gwO1AwUNcBxrRrr7Af5U02SPMaFF8dL0cOqrpw24LPzrg8ibtBq9yKidnCM-B2z74goz41kzv2KNZoPYQLj5XYlbyTknoE-MDo6cq_tGMw7igxbsrKUbGzSGILZ-bDQAVTyGKlU1QudNbZd4lDOe36kdr6dlhWHe7aK6vQgczTOYvQ0v1G5HwouxwTO0WPVpxawld76AZLhathmV4fMmNAYFpZDOytT4YAZEj-jjkPvzJ7HeA_-7ifmtwqLiOSILbLuJgEhLQ5frm9YXSn3crSInflJEsMm6Bs8pE_5H8vdex2tXzL6ZmHiDkDMdB_YM8iOhJGdMfZWsCJ0TcrtZyWZv5t-M1NzhLutplX-mYInE1sXZSTLHcOD0YDhEeMPNJhdGvISG_IbwDfH9OKuGQ0x8UCoe2DPVKOd53PYghKf2Bk8q7tILs3WeHgItnvRbkevjYS287gh_5052TKJJbC8dYxkVlHn-JCsbaMfn_SlYSaWjOfVxvSHKsVlFj5ry-cfScH8ai1bra8LASgwg4y_vpNeeDiA0CwZaPy2l_TF1O_yFsaKItyDkCMJXqhjI', pages=3)[0]
df['Unnamed: 0']

(注:使用Debian系统,可解析这些Unicode编码,但需要转换为UTF-8或ASCII格式的可读数据)


解决方案

1. 批量转换DataFrame中的字符串

Python 3中默认字符串为Unicode类型,若显示为编码转义形式,可通过编码再解码的方式还原为正常字符串,可对整个DataFrame或指定列处理:

# 处理整个DataFrame的所有字符串列
df = df.applymap(lambda x: x.encode('utf-8').decode('utf-8') if isinstance(x, str) else x)

# 仅处理指定列
df['Unnamed: 0'] = df['Unnamed: 0'].apply(lambda x: x.encode('utf-8').decode('utf-8') if isinstance(x, str) else x)

2. 读取PDF时指定编码参数

Tabula-py的read_pdf方法支持encoding参数,可直接指定UTF-8编码读取PDF,从源头避免编码问题:

df = read_pdf('your_pdf_path_or_url', pages=3, encoding='utf-8')[0]

3. 转换为ASCII格式(去除特殊Unicode字符)

若需要将数据转为纯ASCII格式,可使用unidecode库将特殊Unicode字符转换为近似的ASCII字符:
首先安装依赖库:

pip install unidecode

然后处理数据:

from unidecode import unidecode
df['Unnamed: 0'] = df['Unnamed: 0'].apply(lambda x: unidecode(x) if isinstance(x, str) else x)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 00:00:07