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
相关产品推荐
相关产品推荐

