Python中如何控制Pandas DataFrame的浮点数精度并保留末尾的0?

我的期望是,对于某列价格,既保留 2 位小数,都同时能显示出末尾的 0。

对于序列,控制具体数的 X = decimal.Decimal(’%.2f’ % X),显然不能起作用
网上查到的 pd.options.display.float_format = ‘${:,.2f}’.format,似乎没有任何作用。

DataFrame 中相关 series 目前就是保留 2 位小数,但浮点数都没有 0
意思是 2.00 显示为 2,1.90 ,显示为 1.9。
我希望所有浮点数列为 2.00 ,1.90 ,这样整齐的一列。求教正确语法。
Python中如何控制Pandas DataFrame的浮点数精度并保留末尾的0?


3 回复

核心方案: 使用 pandas.set_option 设置全局显示精度,并结合 round 方法控制数据精度,但要注意这通常只影响显示而不改变存储值。如果需要固定格式的字符串输出(保留末尾0),需转换为字符串类型。

具体操作:

  1. 设置全局显示精度(仅影响显示)

    import pandas as pd
    pd.set_option('display.precision', 3)  # 全局显示3位小数
    
  2. 使用 round 方法处理数据(实际四舍五入)

    df_rounded = df.round(3)  # 所有列保留3位小数
    df['column'] = df['column'].round(3)  # 单列处理
    
  3. 完全保留末尾0(转换为字符串)

    # 方法1:使用applymap格式化(适用于整个DataFrame)
    df_str = df.applymap(lambda x: f'{x:.3f}')  # 固定3位小数,末尾补0
    
    # 方法2:使用Series的map方法(针对单列)
    df['column'] = df['column'].map('{:.3f}'.format)
    

示例演示:

import pandas as pd
import numpy as np

# 原始数据
df = pd.DataFrame({
    'A': [1.234567, 2.0, 3.500],
    'B': [4.56789, 5.0, 6.100]
})

print("原始数据:")
print(df)

# 设置显示精度
pd.set_option('display.precision', 3)
print("\n设置显示精度后:")
print(df)

# 实际四舍五入
df_rounded = df.round(2)
print("\n四舍五入到2位小数:")
print(df_rounded)

# 转换为字符串保留末尾0
df_str = df.applymap('{:.3f}'.format)
print("\n字符串格式(保留末尾0):")
print(df_str)

关键区别:

  • set_optionround 处理的是数值,但浮点数存储时末尾的0会被丢弃
  • 字符串格式化能真正保留末尾0,但会失去数值计算能力

一句话建议: 显示用set_option,计算用round,输出固定格式用字符串转换。


找到变相解决的方法。

https://pypi.python.org/pypi/tabulate

利用 tabulate 的 floatfmt 参数完美解决,比 pandas 自带的控制输出能力强太多,还解决了 print 输出时不整齐的问题

%0.2f
c printf 语法
其次,对于价格,最好不要使用浮点数,直接使用整数到分。浮点数的运算取整不知道什么时候会坑

回到顶部