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

如何在DataFrame.to_json方法中实现浮点数的精确无舍入输出

现象成因

pandas的to_json方法默认采用自研的C语言实现序列化逻辑,而非Python标准库的json模块,其浮点数输出逻辑内置了规则判断:

  • 当数值绝对值 ≥ 1e-15时,默认采用定点小数格式输出,同时会按double_precision参数的默认值(10)对小数位做四舍五入截断,所以你会看到1e-12、1e-13这类数值被截断甚至变成0.0
  • 当数值绝对值 < 1e-15时,序列化逻辑会自动切换为科学计数法输出,此时不会应用double_precision的截断规则,会直接输出数值的原始科学计数表示,因此更小的数值反而能保留完整精度

而Python标准库的json模块序列化浮点数时,会直接输出浮点数的标准规范表示,没有额外的格式转换和截断规则,所以不存在精度丢失的问题。

解决方法

要实现所有数值的精确输出,可采用以下两种方案:

方案1:调整double_precision参数

将double_precision参数设置为15(双精度浮点数的最大有效十进制位数),可以避免截断:

print(df.to_json(indent=2, orient='index', double_precision=15))

该方案仍使用pandas原生序列化逻辑,性能较高,适合数据量较大的场景。

方案2:使用标准库json序列化

先将DataFrame转为Python原生字典/列表,再用标准库json.dumps序列化,完全绕过pandas的序列化逻辑,输出和标准库完全一致:

import json
print(json.dumps(df.to_dict(orient='index'), indent=2))

该方案可以完全复现标准库json模块的输出效果,无任何额外截断规则,适合对精度要求极高的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:57:04