python-3.x ValueError:在函数内使用f字符串时格式说明符无效

q3qa4bjr  于 2022-12-24  发布在  Python
关注(0)|答案(2)|浏览(180)

我正在尝试制作Pandas系列:对于所有的值,我想添加千位分隔符,并将小数位限制为两位。另外,对于负值,我想用圆括号将其括起来,而不是使用-符号。因此,输出应该类似于'20,000.00', '(152,111.12)'等。
我知道f-string方法有效因为当我运行

val = 20000
f'{val:,.2f}'

它给了我正确的结果'20,000.00'。但是当我试图创建一个函数并将其应用于Pandas中的整个列时:

def format_pnl(value):
    # Format the value as a string with thousand separators and 2 decimal places
    formatted_value = f"{value:, .2f}"
    # If the value is negative, wrap it in parentheses
    if value < 0:
        formatted_value = f"({formatted_value})"
    return formatted_value

我得到了ValueError:无效的格式说明符。这对我来说真的是难以置信,因为格式说明符绝对有效。我在这里错过了什么?

bf1o4zei

bf1o4zei1#

您在逗号和句点之间添加了一个空格。

093gszye

093gszye2#

您可以很容易地执行此操作并将其应用于特定列

import pandas as pd

df = pd.DataFrame([100000, 1113, 510101.05, 6456464, -846464.12])

def format_pnl(value):
    return f"{value:,.2f}" if value >= 0 else f"({abs(value):,.2f})"

# Specify the specific column you want here
df[0] = df[0].apply(format_pnl)

display(df)

    0
0   100,000.00
1   1,113.00
2   510,101.05
3   6,456,464.00
4   (846,464.12)

相关问题