如何修改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]
说明
- 统计列直接存为两位小数的字符串,确保
3.40不会被简化成3.4 - 拼接时直接用字符串相加,比原来的
apply写法更简洁高效 - 最终生成的
Mean ± SD、Median (IQR)、Range会严格保留两位小数的格式,比如3.40 ± 5.55、2.50 (1.20 - 4.80)
内容的提问来源于stack exchange,提问作者Joe
相关产品推荐
相关产品推荐

