我正在尝试在 IPython notebook 中写一篇论文,但遇到了一些显示格式的问题。假设我有以下数据帧 df
,有没有办法将 var1
和 var2
格式化为 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/