这不是数据出错,而是pandas默认用display.precision=6控制小数位,并对绝对值>1e6或

为什么浮点数显示位数不一致或变成科学计数法?
这不是数据出错,而是 Pandas 默认用 display.precision=6 控制小数位,并对绝对值 >1e6 或 1234567.89 显示成 1.234568e+06,0.000012345 变成 1.234500e-05 —— 本质是显示策略,不是精度丢失。
用 display.precision 统一小数位数
这是最直接的控制方式,影响所有数值列(包括 int、float),但不改变原始值:
-
pd.set_option('display.precision', 2):所有浮点列统一显示 2 位小数(如3.14159→3.14) - 默认值是
6,可用pd.get_option('display.precision')查看当前设置 - 设为
0会显示整数形式(3.0→3),但不会四舍五入原始数据 - 注意:
precision不控制百分比或货币类格式,那是float_format的职责
用 display.float_format 做定制化格式(含前缀/后缀/百分比)
当需要加单位、货币符号或转百分比时,float_format 比 precision 更灵活:
-
pd.set_option('display.float_format', '{:.2f}'.format):等价于precision=2,但更明确 -
pd.set_option('display.float_format', '¥{:.2f}'.format):每行都加 ¥ 符号 - 百分比列必须先乘 100,再用
'{:.1%}'.format,否则0.05会显示成5.0%(实际应为5.0%,但若原始值是0.05,直接 format 就对) - 该选项只对 float 类型生效;如果列是
object或含None,可能静默失效
别忽略 display.chop_threshold 和浏览器渲染限制
有些极小值(如 1e-10)会被显示为 0.0,这是 chop_threshold 在起作用:
-
pd.set_option('display.chop_threshold', None)可禁用该行为,但慎用——可能暴露噪声值 - 即使设了
precision=10,Jupyter 输出区仍受浏览器内存和渲染性能限制;超宽表格或超长文本建议配合display.max_colwidth和display.expand_frame_repr=False - 这些设置只影响
df直接执行或print(df),不影响df.head()、df.describe()等方法的输出











