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

Streamlit中st.dataframe()格式化2位小数货币且不影响排序的方法

Streamlit交互表格货币格式化实现方案

不要提前将数值列转换为字符串类型,直接通过Streamlit原生的列配置参数实现显示层格式化,即可同时保留数值排序、筛选等交互能力,不会出现字符串字典序排序的异常。

推荐实现(Streamlit 1.23及以上版本)

使用st.dataframe/st.data_editor自带的column_config参数配置数值列显示规则,格式化仅作用于前端展示,不会修改原始DataFrame的数值类型:

st.dataframe(
    df_final,
    column_config={
        "Total Quote Value": st.column_config.NumberColumn(
            format="£%,.2f"
        )
    }
)
  • 配置后该列数值会自动显示为带英镑符号、千分位分隔符、固定保留2位小数的格式,比如数值12567.8会显示为£12,567.80
  • 表格排序、筛选等交互逻辑完全基于原始数值执行,不会出现字符串排序错乱的问题
  • 多列需要格式化时,直接在column_config字典中追加对应列的配置即可,无需修改原始数据

旧版本兼容方案

如果使用的Streamlit版本低于1.23,可以传入pandas的Styler对象实现格式化,同样不会破坏交互能力:

st.dataframe(
    df_final.style.format({
        "Total Quote Value": "£{:,.2f}"
    })
)

避坑说明

  • 禁止在传入表格前对数值列执行.map("£{:,.2f}".format)这类转字符串的操作,这是导致排序异常的核心原因
  • 如果需要切换货币类型、调整保留小数位数,直接修改format参数里的货币符号和小数位数值即可,比如美元格式写"$%,.2f"、保留3位小数写"£%,.3f"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:54:30