You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python Locale {:n}格式指定浮点数小数位数

解决Streamlit中Pandas DataFrame巴西格式浮点数小数位数设置问题

问题原因

你使用的{:2n}格式符控制的是有效数字位数,而非小数位数,所以设置后和默认输出效果一致。要指定小数位数并遵循巴西数字格式(千分位用.,小数位用,),需要调整格式化方式。

解决方案

方法一:利用Locale自定义格式化函数(推荐)

通过locale.format_string实现既遵循巴西格式,又指定小数位数的格式化:

import locale
import streamlit as st
import pandas as pd

# 配置巴西本地化环境
locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')

# 自定义格式化函数,可指定小数位数
def format_brazilian(value, decimals=2):
    return locale.format_string(f"%.{decimals}f", value, grouping=True)

# 应用格式化到DataFrame的统计结果
st.dataframe(
    df[['FATURAMENTO', 'VENDAS']].describe().style.format(format_brazilian),
    use_container_width=True
)

该方法依赖系统的locale配置,能准确适配巴西的数字格式规则,避免手动替换符号的误差。如果系统未安装pt_BR.UTF-8,可尝试用locale.setlocale(locale.LC_ALL, '')自动适配系统本地化设置。

方法二:手动替换格式符号(快速测试用)

直接修改格式字符串的分隔符,模拟巴西格式:

st.dataframe(
    df[['FATURAMENTO', 'VENDAS']].describe().style.format(
        lambda x: "{:,.2f}".format(x).replace('.', '|').replace(',', '.').replace('|', ',')
    ),
    use_container_width=True
)

此方法无需依赖locale,但仅适用于简单场景,无法处理locale包含的其他格式规则。

内容的提问来源于stack exchange,提问作者Eduardo Chaves

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 12:40:20