-1

伊姆古尔

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 东西,但我并不精通这些语言,所以它们根本不起作用。

4

1 回答 1

1

您的输出看起来像是在使用HTMLJupyter 笔记本中的显示,因此您需要设置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以实现会计格式逻辑。

于 2018-07-14T22:18:13.450 回答