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

使用tabula-py读取PDF表格:如何以字符串格式保留数值小数精度

解决tabula-py读取PDF表格时丢失小数精度的问题

我之前也碰到过一模一样的情况——用tabula读取带多位小数的数值时,自动转成float后末尾的零就没了,完全不符合需求。这里有两个可靠的方法帮你把数值以字符串格式读取,完整保留原始的小数精度:

方法一:通过CSV中转强制读取为字符串

这个方法的思路是让tabula先把表格输出为CSV格式(完整保留原始文本格式),再用pandas读取CSV时指定所有列的类型为字符串,避免自动类型推断改变原始内容:

from tabula import read_pdf
import pandas as pd

fn = "file.pdf"
# 读取第一个表格的CSV格式内容
csv_content = read_pdf(fn, pages='all', multiple_tables=True, output_format='csv')[0]
# 用pandas读取CSV字符串,强制所有列为字符串类型
df = pd.read_csv(pd.compat.StringIO(csv_content), dtype=str)
print(df)

方法二:直接在read_pdf中指定pandas参数

tabula-py支持通过pandas_options参数传递设置给pandas,我们可以直接指定dtype=str,让所有列以字符串格式加载:

from tabula import read_pdf

fn = "file.pdf"
# 读取时通过pandas_options强制所有列为字符串
df = read_pdf(fn, pages='all', multiple_tables=True, pandas_options={'dtype': str})[0]
print(df)

为什么会出现这个问题?

tabula-py默认会让pandas自动推断每列的数据类型,当遇到像20.0000这样的数值时,pandas会把它解析为float类型,而float类型会自动省略末尾无意义的零,看起来像是丢失了精度,但实际数值是准确的。如果你需要严格保留PDF里显示的文本格式,就必须强制以字符串类型读取。

如果之后需要把字符串转回数值类型进行计算,可以用pd.to_numeric()方法,比如:

df['your_column'] = pd.to_numeric(df['your_column'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 20:12:49