如何在Pandas DataFrame中实现部分列去小数、部分列保留两位小数
DataFrame多列差异化格式设置方案
需求明确
RFW Total、Hit Count、Cover Count、Tie Wins、Tie Away列:去掉小数,以整数形式显示Hit Ratio %、Cover Ratio %、Tie Ratio %、Revenue列:四舍五入后保留两位小数
现有代码的问题
- 先全局调用
.round(decimals=2)会统一处理所有列的小数,后续格式设置容易出现冲突 - 注释里的
.style.format写法不完整,既未闭合括号,也没给整数列使用正确的格式符
正确实现方式
直接通过Styler.format()传入格式规则字典,为不同列指定对应格式即可,无需提前全局round:
# 先构造DataFrame,跳过全局round步骤 df1 = pd.DataFrame(DF_data, index=index_labels) # 定义各列的格式规则 format_map = { # 整数列:用:,.0f实现千分位分隔+无小数(自动四舍五入到整数) 'RFW Total': '{:,.0f}', 'Hit Count': '{:,.0f}', 'Cover Count': '{:,.0f}', 'Tie Wins': '{:,.0f}', 'Tie Away': '{:,.0f}', # 需保留两位小数的列:千分位分隔+两位小数 'Hit Ratio %': '{:,.2f}', 'Cover Ratio %': '{:,.2f}', 'Tie Ratio %': '{:,.2f}', 'Revenue': '{:,.2f}' } # 应用格式 styled_df = df1.style.format(format_map) styled_df
补充说明
- 如果
Tie Ratio %需要显示为百分比格式(比如把0.35转换为35.00%),可将格式改为'{:,.2f}%',同时记得提前将该列数值乘以100 - 若不需要千分位分隔符,可把格式符里的
,去掉,比如整数列写成'{:.0f}'
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

