python - 将某些 float 数据框列格式化为 Pandas 中的百分比

我正在尝试在 IPython notebook 中写一篇论文,但遇到了一些显示格式的问题。假设我有以下数据帧 df,有没有办法将 var1var2 格式化为 2 位小数和 var3成百分比。

       var1        var2         var3    
id                                              
0    1.458315    1.500092   -0.005709   
1    1.576704    1.608445   -0.005122    
2    1.629253    1.652577   -0.004754    
3    1.669331    1.685456   -0.003525   
4    1.705139    1.712096   -0.003134   
5    1.740447    1.741961   -0.001223   
6    1.775980    1.770801   -0.001723    
7    1.812037    1.799327   -0.002013    
8    1.853130    1.822982   -0.001396    
9    1.943985    1.868401    0.005732

里面的数字不乘以 100,例如-0.0057=-0.57%。

最佳答案

接受的答案建议修改原始数据以进行演示,这是您通常不想要的。想象一下,您需要对这些列进行进一步分析,并且需要舍入丢失的精度。

根据您的情况,您可以修改数据框中各个列的格式:

output = df.to_string(formatters={
    'var1': '{:,.2f}'.format,
    'var2': '{:,.2f}'.format,
    'var3': '{:,.2%}'.format
})
print(output)

供您引用,'{:,.2%}'.format(0.214) 产生 21.40%,因此无需乘以 100。

您不再有一个漂亮的 HTML 表格,而是一个文本表示。如果您需要继续使用 HTML,请改用 to_html 函数。

from IPython.core.display import display, HTML
output = df.to_html(formatters={
    'var1': '{:,.2f}'.format,
    'var2': '{:,.2f}'.format,
    'var3': '{:,.2%}'.format
})
display(HTML(output))

更新

从 pandas 0.17.1 开始,生活变得更加轻松,我们可以立即获得漂亮的 html 表格:

df.style.format({
    'var1': '{:,.2f}'.format,
    'var2': '{:,.2f}'.format,
    'var3': '{:,.2%}'.format,
})

https://stackoverflow.com/questions/23981601/

相关文章:

python - 使用 Python 减去两个 UNIX 时间戳时,如何产生人类可读的差异?

visual-studio-2010 - 在 ReSharper for Visual Studio

emacs - 在 emacs 中自动格式化源文件

java - 如何在 Java 中计算时间跨度并格式化输出?

python - 将整数格式化为十六进制字符串

c# - 在 Resharper 中为对象和数组初始化程序获取正确的缩进

java - 最好的 Eclipse 代码格式化程序?

json - 如何在传出的 JSON 中格式化时间戳

c# - 如何将 bool 值一般格式化为是/否字符串?

c - 什么是 scanf ("%*s") 和 scanf ("%*d") 格式标识符?