Pandas df 中的会计格式
Accounting formatting in Pandas df
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 会计格式在 pandas jupyter 显示中格式化货币。如下所示。
我用上面的代码最成功,但我也尝试了无数 css 和 html 的东西,但我不精通这些语言所以他们没有真正工作完全没有。
您的输出看起来像是在使用 Jupyter notebook 中的 HTML
显示,因此您需要为 white-space
样式设置 pre
,因为 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
以实现会计格式逻辑。
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 会计格式在 pandas jupyter 显示中格式化货币。如下所示。
我用上面的代码最成功,但我也尝试了无数 css 和 html 的东西,但我不精通这些语言所以他们没有真正工作完全没有。
您的输出看起来像是在使用 Jupyter notebook 中的 HTML
显示,因此您需要为 white-space
样式设置 pre
,因为 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
以实现会计格式逻辑。