【问题标题】:Pandas number formatting, negative numbers with parentheses熊猫数字格式,带括号的负数
【发布时间】:2018-11-23 09:23:08
【问题描述】:

我要获取以下数据框(df):

Team    Group1    Group2    Group3
green    1         5         -6
blue     -3        10        5
red      -7        9         -8

并将此格式仅应用于 Group1:Group3 列:

DF = '{0:,.0f}'.format(x) if x > 0 else '({0:,.0f})'.format(abs(x)) for x in DF

或使用我似乎无法正确语法的 def:

def formatting(x):
 if i > 0:
     '{0:,.0f}'.format(x)
 else:
     '({0:,.0f})'.format(abs(x))

DF.applymap(formatting)

预期的输出是这样的:

Team    Group1    Group2    Group3
green    1         5         (6)
blue     (3)       10        5
red      (7)       9         (8)

提前谢谢你!

【问题讨论】:

    标签: python string python-3.x pandas dataframe


    【解决方案1】:

    在 Python 3.6+ 中,您可以使用格式化的字符串文字,也称为 f-strings:

    def formatter(x):
        return str(x) if x >= 0 else f'({abs(x)})'
    
    for col in df.columns[1:]:
        df[col] = df[col].apply(formatter)
    
    print(df)
    
        Team Group1  Group2 Group3
    0  green      1       5    (6)
    1   blue    (3)      10      5
    2    red    (7)       9    (8)
    

    【讨论】:

    • 感谢您的帮助!无论如何,这是否可以遍历所有列?然后这个函数会忽略实际的字符串吗?
    • 您可以只迭代df.columns[1:],即忽略第一列,就像我的回答一样。对于数字类型,您可以使用df.select_dtypes
    • 非常感谢您的帮助,这太完美了!
    猜你喜欢
    • 2021-10-18
    • 1970-01-01
    • 2013-11-04
    • 2021-11-01
    • 2018-03-28
    • 2023-03-09
    • 2014-10-09
    • 2020-08-23
    • 2022-11-01
    相关资源
    最近更新 更多