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
相关产品推荐
相关产品推荐

