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),需转换为字符串类型。
具体操作:
-
设置全局显示精度(仅影响显示):
import pandas as pd pd.set_option('display.precision', 3) # 全局显示3位小数 -
使用
round方法处理数据(实际四舍五入):df_rounded = df.round(3) # 所有列保留3位小数 df['column'] = df['column'].round(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_option和round处理的是数值,但浮点数存储时末尾的0会被丢弃- 字符串格式化能真正保留末尾0,但会失去数值计算能力
一句话建议: 显示用set_option,计算用round,输出固定格式用字符串转换。
%0.2f
c printf 语法
其次,对于价格,最好不要使用浮点数,直接使用整数到分。浮点数的运算取整不知道什么时候会坑


