在熊猫中将某些浮动数据框列格式化为百分比

新手上路,请多包涵

我正在尝试在 IPython notebook 中写一篇论文,但遇到了一些显示格式问题。 Say I have following df , is there any way to format var1 and var2 into 2 digit decimals and var3 into percentages.

        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%。

原文由 user3576212 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 613
2 个回答

使用 round 函数替换值,并格式化百分比数字的字符串表示形式:

 df['var2'] = pd.Series([round(val, 2) for val in df['var2']], index = df.index)
df['var3'] = pd.Series(["{0:.2f}%".format(val * 100) for val in df['var3']], index = df.index)

round 函数将浮点数舍入到作为函数第二个参数提供的小数位数。

字符串格式允许您根据需要表示数字。您可以通过更改 f 之前的数字来更改显示的小数位数。

ps 我不确定您的“百分比”数字是否已经乘以 100。如果乘以 100,那么您显然会想要更改显示的小数位数,并删除百乘法。

原文由 Woody Pride 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

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

 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,
})

原文由 linqu 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题