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 将列格式化为货币的主要内容,如果未能解决你的问题,请参考以下文章