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

如何修改Python函数使拼接的浮点数保留末尾0(如3.40 ±5.55)

解决Pandas分组统计摘要拼接时丢失末尾0的问题

你当前的函数在生成统计摘要时,拼接浮点数会丢失末尾的0,核心问题出在先将格式化后的字符串转回float类型这一步——float会自动省略末尾无意义的0,导致转成字符串时变成3.4而非3.40。

原函数问题点

这段循环代码是根源:

for i in ['25%', '50%', '75%', 'std', 'min', 'max', 'mean']:
    df[i] = df[i].apply(lambda x: float("{:.2f}".format(x)))

"{:.2f}".format(x)已经能生成保留两位小数的字符串(比如"3.40"),但转成float后会变成3.4,后续再转字符串就丢失了末尾的0。

修改方案

直接将统计列格式化为保留两位小数的字符串,而非转回float,后续拼接时直接使用字符串即可:

修改后的完整函数:

def main_table(data, gby_lst, col):
    df = data.groupby(gby_lst)[col].describe()
    df = df.reset_index()
    # 直接格式化为两位小数的字符串,不转float
    for i in ['25%', '50%', '75%', 'std', 'min', 'max', 'mean']:
        df[i] = df[i].apply(lambda x: "{:.2f}".format(x))
    # 直接拼接字符串,无需再astype(str)
    df['Mean ± SD'] = df['mean'] + ' ± ' + df['std']
    df['Median (IQR)'] = df['50%'] + ' (' + df['25%'] + ' - ' + df['75%'] + ')'
    df['Range'] = df['min'] + ' - ' + df['max']

    summary_list = gby_lst + ['Mean ± SD', 'Median (IQR)', 'Range']
    return df.loc[:, summary_list]

说明

  1. 统计列直接存为两位小数的字符串,确保3.40不会被简化成3.4
  2. 拼接时直接用字符串相加,比原来的apply写法更简洁高效
  3. 最终生成的Mean ± SD、Median (IQR)、Range会严格保留两位小数的格式,比如3.40 ± 5.55、2.50 (1.20 - 4.80)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:16:11