Pandas df中的会计格式

时间:2018-07-13 12:56:09

标签: python pandas pandas-styles

Imgur

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显示中格式化。如下所示。

Imgur

我在上面的代码中最成功,但是我也尝试了无数的CSS和html内容,但是我不精通这些语言,因此它们根本无法正常工作。

1 个答案:

答案 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}')

Float format

这不太正确,因为您要将负数转换为(2),并且可以使用嵌套格式来实现,将数字格式与对齐方式分开,因此可以添加()否定的,例如:

x_style.format(lambda f: '${:>10}'.format(('({:,.0f})' if f < 0 else '{:,.0f}').format(f)))

Accounting Format

注意:这在假设10足够宽的意义上是脆弱的,而excel动态地将$对齐到该列中所有值的最大宽度。

执行此操作的另一种方法是扩展string.StringFormatter以实现记帐格式逻辑。