如何使用逗号和点设置数字浮动的格式

2024-10-03 11:19:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要格式化以下数据:

  Ativo        high       close
 HTMX11       169.8       169.8
 KNHY11       116.0       116.0
 FAED11       272.3       272.3
 FLRP11     1579.92     1579.92
 FVPQ11       215.5       215.5

需要将1579.92转换为1.579,92

没问题,因为我可以:

import pandas as pd
import locale
locale.setlocale (locale.LC_ALL, 'pt_br.utf-8')
pd.set_option ('display.float_format', lambda x: locale.format ('%. 2f', x, grouping = True))

但当我需要将列转换为字符串并添加一些字母时,数字只保留逗号:

我需要完整的格式

df['close'] = '$' + df['close'].astype()
df['close']

结果:

Fechamento
  R$ 169,8
  R$ 116,0
  R$ 272,3
R$ 1579,92
  R$ 215,5

期望输出:

R$ 1.579,92

Tags: 数据importformatpandasdfcloselocalepd
2条回答
import pandas as pd
from babel.numbers import format_currency
df = pd.DataFrame({"close":[169.8,116.0,272.3,1579.92,215.5]})
df['close'].apply(lambda x :format_currency(x,'BRL', locale='pt_BR'))

输出:

0      R$ 169,80
1      R$ 116,00
2      R$ 272,30
3    R$ 1.579,92
4      R$ 215,50

正如您所注意到的,display选项只影响显示。因此,如果要将列实际转换为字符串,则需要执行显式转换,可能需要使用locale.format()

locale方法的功能也有一定的限制,因此我建议使用Babel模块进行国际化和本地化。Babel有一个更丰富的API,它实际上提供了您可以使用的本地化数据(因此您不需要依赖于它在您的O.S.中的可用性)。它还包括有关货币的数据,因此它也可以为您进行转换

您可以通过以下方式安装Babel:

pip install Babel

然后,您可以将您的列转换为使用巴西真实货币,并使用:

from babel.numbers import format_currency

df['close'] = df['close'].apply(
    lambda v: format_currency(v, 'BRL', locale='pt_BR'),
)

或者,要同时转换“高”和“近”:

df[['high', 'close']] = df[['high', 'close']].applymap(
    lambda v: format_currency(v, 'BRL', locale='pt_BR'),
)

如果要从数据帧生成HTML(例如,在Jupyter笔记本中),则可以使用Styling API仅在呈现数据帧时应用该格式,将基础数据保持为浮点数而不是字符串:

df.style.format(
    lambda v: format_currency(v, 'BRL', locale='pt_BR'),
    subset=['high', 'close'],
)

相关问题 更多 >