Pandas 将列格式化为货币

Posted

技术标签:

【中文标题】Pandas 将列格式化为货币【英文标题】:Pandas format column as currency 【发布时间】:2016-05-03 07:55:03 【问题描述】:

给定以下数据框:

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   $12.3K
1   B   $12.5K
2   C    $0.6K
3   D    $7.0K

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

我假设一旦浮点数转换为货币,它们将是对象格式,但我希望有办法解决这个问题。

提前致谢!

【问题讨论】:

【参考方案1】:

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  $12,355.00
1  B  $12,555.67
2  C     $640.00
3  D   $7,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

【讨论】:

这很棒。感谢您提及!【参考方案2】:

或者您可以使用lambda function 和f-string 以获得更短的语法更短 更短的语法

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

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

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

如果你想在所有列上使用这个方法,你可以用applymap替换apply

df = df.applymap(lambda x: f"$x/1000:.1fk")

【讨论】:

对于多个列,您需要像 this answer 一样传递。 df[["A", "B", "C"]] = df[["A", "B", "C"]].apply(lambda series: series.apply(lambda value: f"value:,") )【参考方案3】:
    def format(x):
        return "$:.1fK".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)

【讨论】:

您也可以使用locale.currency(value, grouping=True),但您需要导入并设置本地:locale.setlocale(locale.LC_ALL, 'en_US')【参考方案4】:

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

df['C'] = df['C'].apply(lambda x: "$:.1fk".format((x/1000)))

【讨论】:

欢迎来到***。这个答案将通过一些解释得到加强。见***.com/help/how-to-answer

以上是关于Pandas 将列格式化为货币的主要内容,如果未能解决你的问题,请参考以下文章

在碧玉报告中将字符串格式化为货币格式

如何将十进制属性格式化为货币?

将数字格式化为货币金额

将 bin 标签格式化为货币

如何将数字格式化为货币字符串

如何使用正则表达式将数字格式化为货币