x=pd.DataFrame([[5.75,7.32],[1000000,-2]])
def money(val):
"""
Takes a value and returns properly formatted money
"""
if val < 0:
return "$({:>,.0f})".format(abs((val)))
else:
return "${:>,.0f}".format(abs(val))
x.style.format({0: lambda x: money(x),
1: lambda x: money(x)
})
我正在尝试使用excel会计格式来使货币在大熊猫jupyter显示中格式化。如下所示。
我在上面的代码中最成功,但是我也尝试了无数的CSS和html内容,但是我不精通这些语言,因此它们根本无法正常工作。
答案 0 :(得分:1)
您的输出看起来像您在Jupyter笔记本中使用HTML
显示器一样,因此您需要将pre
设置为white-space
样式,因为HTML
会折叠多个空格,并使用monospace
字体,例如:
styles = {
'font-family': 'monospace',
'white-space': 'pre'
}
x_style = x.style.set_properties(**styles)
现在要格式化浮点数,用$
对齐的简单权限可能看起来像:
x_style.format('${:>10,.0f}')
这不太正确,因为您要将负数转换为(2)
,并且可以使用嵌套格式来实现,将数字格式与对齐方式分开,因此可以添加()
否定的,例如:
x_style.format(lambda f: '${:>10}'.format(('({:,.0f})' if f < 0 else '{:,.0f}').format(f)))
注意:这在假设10
足够宽的意义上是脆弱的,而excel动态地将$
对齐到该列中所有值的最大宽度。
执行此操作的另一种方法是扩展string.StringFormatter
以实现记帐格式逻辑。