Pandas 将列格式设置为货币

Pandas format column as currency

给定以下数据框:

import pandas as pd
df = pd.DataFrame(
        {'A':['A','B','C','D'],
         'C':[12355.00,12555.67,640.00,7000]
        })
df

    A   C
0   A   12355.00
1   B   12555.67
2   C   640.00
3   D   7000.00

我想像这样将这些值转换为以千美元为单位的美元:

    A   C
0   A   .3K
1   B   .5K
2   C    [=12=].6K
3   D    .0K

我需要做的第二件事是以某种方式将它们放入 Seaborn 热图中,它只接受浮点数和整数。有关热图方面的更多信息,请参阅 here

我假设一旦浮点数转换为货币,它们将采用对象格式,但我希望有一种解决方法。

提前致谢!

    def format(x):
        return "${:.1f}K".format(x/1000)


    df = pd.DataFrame(
        {'A':['A','B','C','D'],
         'C':[12355.00,12555.67,640.00,7000]
        })

    df['C'] = df['C'].apply(format)

    print(df)

或者您可以使用 lambda 函数来缩短语法

df['C'] = df['C'].apply(lambda x: "${:.1f}k".format((x/1000)))

或者您可以使用 lambda function and f-string 甚至 更短 更短的语法

df['C'] = df['C'].apply(lambda x: f"${x/1000:.1f}k")

如果您想在特定的列列表上使用此方法,您可以在循环中参数化列名

for col in ['A', 'B', 'C']:
    df[col] = df[col].apply(lambda x: f"${x/1000:.1f}k")

如果要在所有列上使用此方法,可以将 apply 替换为 applymap

df = df.applymap(lambda x: f"${x/1000:.1f}k")

Flexibile formatting using Babel

如果您正在寻找一种针对不同语言环境设置货币和数字格式的灵活方式,我建议使用 Babel:

示例数据

df = pd.DataFrame(
        {'A':['A','B','C','D'],
         'C':[12355.00,12555.67,640.00,7000]
        })
print(df)

   A         C
0  A  12355.00
1  B  12555.67
2  C    640.00
3  D   7000.00

格式化美元货币:

from babel.numbers import format_currency

df["C"] = df["C"].apply(lambda x: format_currency(x, currency="USD", locale="en_US"))

   A           C
0  A  ,355.00
1  B  ,555.67
2  C     0.00
3  D   ,000.00

格式化欧元货币(注意千位和小数分隔符的区别):

df["C"] = df["C"].apply(lambda x: format_currency(x, currency="EUR", locale="nl_NL"))

   A            C
0  A  € 12.355,00
1  B  € 12.555,67
2  C     € 640,00
3  D   € 7.000,00