Pandas DataFrame保留两位小数并添加百分号的最快实现方法
解决方案:pandas DataFrame浮点数转两位小数百分号格式
你原代码的问题在于round(2)仅做了数值层面的四舍五入,当小数第二位为0时,转字符串操作会自动丢弃末尾的0,才会出现仅保留1位小数的情况。可以通过格式化字符串强制约束小数位数来解决,两种常用方案如下:
方案1:直接修改DataFrame单元格内容为目标格式
如果需要将DataFrame的内容直接转成带两位小数、百分号的字符串,使用以下代码:
import numpy as np import pandas as pd df = pd.DataFrame(data=np.random.randn(5,5)) # 强制每个数值保留两位小数后拼接百分号 # pandas 2.1以下版本用applymap,2.1及以上版本可替换为map df = df.applymap(lambda x: f"{x:.2f}%") print(df)
该方案输出的所有单元格都会严格保留两位小数,例如数值-0.2会转为-0.20%,2.0会转为2.00%,完全符合你的要求。
方案2:仅展示时格式化,保留原浮点数据
如果后续还需要对DataFrame做数值计算,不需要修改原始数值,仅在展示时显示为百分号格式,可以用pandas的样式格式化功能:
import numpy as np import pandas as pd df = pd.DataFrame(data=np.random.randn(5,5)) # 仅修改展示样式,原df的数值还是浮点型,不影响后续计算 styled_df = df.style.format("{:.2f}%") # Jupyter环境下直接输出styled_df即可看到格式化效果,也可调用to_html()导出为带样式的html文件
内容的提问来源于stack exchange,提问作者Andi
相关产品推荐
相关产品推荐

