You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas df.loc.astype(int)去小数不生效且HTML渲染时小数位增多

问题1:astype(int)转换后回存DataFrame不生效

原因

Pandas中DataFrame每一列的数据类型是统一的,你当前所有列因为包含Ratio行的浮点数值,所以整列的dtype为浮点型。你单独把Dispose行转成整型后回存,会被自动向上转型为浮点型,所以小数位会保留。

解决方法

如果你仅需要展示时无小数,不需要修改底层数据类型,直接在后续渲染HTML时指定格式即可;如果确实需要修改数据类型,可以先将整个DataFrame转为object类型,再赋值修改:

# 先转成object类型,允许同一列存不同类型数据
file = file.astype(object)
# 再执行赋值操作
file.loc['Dispose'] = file.loc['Dispose'].astype(int)
file.loc['Damage'] = file.loc['Damage'].astype(int)
问题2:邮件中表格小数位增多不符合要求

原因

Pandas的Styler对象默认没有指定数值格式时,会自动输出浮点型的完整有效位数,导致显示的小数位变多。

解决方法

在应用样式后,通过format方法为不同行指定显示格式即可,修改样式处理部分的代码如下:

def f(val):
   # 原判断逻辑可按需简化:x<0.4已经包含x<1的条件
   return ['color: darkred; background-color: salmon' if x < 0.4 and x < 1 else 'color: darkgreen; background-color: lightgreen' if 0.4 < x < 1 else '' for x in val]

html_style = file.style.apply(f, axis = 1 )\
    # 指定Dispose行显示0位小数
    .format(subset=pd.IndexSlice['Dispose', :], formatter="{:.0f}")\
    # 指定Damage行显示0位小数
    .format(subset=pd.IndexSlice['Damage', :], formatter="{:.0f}")\
    # 指定Ratio行显示2位小数
    .format(subset=pd.IndexSlice['Ratio', :], formatter="{:.2f}")
html_text = html_style.render()

内容的提问来源于stack exchange,提问作者Vanassins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:45:02