如何在Streamlit中完整展示Excel文件?为何显示效果与原文件不同?
Streamlit展示Excel数据与原文件差异的解决方法
以下是常见导致展示差异的原因及对应解决方案:
数据格式不匹配
Excel中的日期、货币、百分比等格式,在pandas读取时可能被自动转换为默认数据类型,导致Streamlit展示样式和原文件不一致。
解决办法:- 读取Excel时指定列的数据类型,避免自动转换:
df = pd.read_excel("contoh.xlsx", dtype={"编号列": str, "百分比列": float}) - 利用pandas的Styler自定义展示格式:
styled_df = df.style.format({ "日期列": "{:%Y年%m月%d日}", "金额列": "¥{:,.2f}", "占比列": "{:.2%}" }) st.dataframe(styled_df)
- 读取Excel时指定列的数据类型,避免自动转换:
列宽、行高差异
Streamlit的st.dataframe默认自动调整列宽,和Excel手动设置的布局不同,会导致视觉效果不一致。
解决办法:通过column_config自定义列宽,height设置表格高度:st.dataframe( df, column_config={ "长文本列": st.column_config.TextColumn(width="large"), "短内容列": st.column_config.TextColumn(width="small") }, height=700 # 设置表格高度,适配更多行 )合并单元格丢失
Excel中的合并单元格在pandas读取后,仅保留左上角单元格的值,其余合并位置为NaN,Streamlit原生表格不支持合并单元格展示。
解决办法:使用第三方组件streamlit-aggrid实现合并单元格效果:from st_aggrid import AgGrid import pandas as pd import streamlit as st df = pd.read_excel("contoh.xlsx") AgGrid(df, enable_enterprise_modules=True)隐藏行列展示差异
Excel中可能存在隐藏的行或列,pandas默认会读取所有行列,导致Streamlit展示内容比原文件多。
解决办法:读取时指定要加载的列,或过滤空行:# 指定读取的列 df = pd.read_excel("contoh.xlsx", usecols=["产品名称", "销量", "金额"]) # 过滤全空的行 df = df.dropna(how="all")
另外,你的代码中遗漏了streamlit的导入,需要在开头添加:
import streamlit as st
内容的提问来源于stack exchange,提问作者Fatih Hurisqi
相关产品推荐
相关产品推荐

