Pandas透视表应用style.map后浮点数格式失效如何修复?
修复浮点数格式问题的方法
方法1:用style.format统一设置所有元素格式 + 条件样式
全局的pd.options.display.float_format对Styler对象不生效,且style.map仅处理单元格样式(比如颜色),不控制数值格式。可以直接通过Styler的format方法,一次性指定值、行索引、列标题的小数格式,再叠加条件样式:
import pandas as pd df = pd.DataFrame( [ [0.5, 1.5, 0.1], [0.5, 2.5, 0.3], [1.5, 1.5, 0.4], [1.5, 2.5, 0.2] ], columns=['A', 'B', 'C'] ) pt = df.pivot_table(index='B', columns='A', values='C') # 先统一设置格式:值、索引、列都保留2位小数,再叠加条件样式 (pt.style .format('{:,.2f}', subset=pd.IndexSlice[:, :]) # 设置所有单元格值的格式 .format_index('{:,.2f}', axis=0) # 设置行索引(B列)的格式 .format_index('{:,.2f}', axis=1) # 设置列标题(A列)的格式 .map(lambda x: 'color:red;' if x > 0.2 else None) )
方法2:用precision参数快速统一小数位数
如果所有元素都只需要保留2位小数,用precision参数更简洁,能一次性统一数值(包括索引、列、单元格值)的小数位数:
(pt.style .precision(2) # 统一设置所有数值的小数位数为2 .map(lambda x: 'color:red;' if x > 0.2 else None) )
问题根源
pd.options.display.float_format是全局打印设置,仅对普通DataFrame的终端输出生效,Styler作为独立的渲染系统不会继承该配置。而style.map仅修改单元格样式,完全不影响数值的显示格式,所以表头和值的小数位数会回到默认状态,导致格式混乱。
内容的提问来源于stack exchange,提问作者Raf
相关产品推荐
相关产品推荐

