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

Streamlit调用Pandas describe(include='all')报类型转换异常问题

问题根因

这个报错和pandas.DataFrame.describe()的逻辑没有关系,是Streamlit渲染表格环节的类型转换规则导致的:

  • 调用describe(include='all')生成的统计表中,Order ID这类文本列会同时包含数值类统计结果(计数count、去重数unique、频次freq)和字符串类统计结果(最高频取值top,也就是报错里的CA-2018-100111这类订单号),整列是混合类型的object格式
  • 1.20.0版本之前的Streamlit默认用Apache Arrow做表格数据序列化传输,会尝试自动把object类型的列统一转换为数值类型,碰到列里的字符串值就会触发你看到的类型转换异常
  • 脱离Streamlit直接运行Pandas代码不会报错,是因为Pandas原生输出不需要做统一类型的序列化处理,混合类型列可以正常打印,不会触发强制类型转换逻辑。
可直接用的修复方案

按实现成本从低到高选择即可:

  • 最简单的绕路方案:把describe生成的结果表统一转为字符串类型再传给st.write,直接跳过Arrow的自动类型推断逻辑
    st.write(superstore_data.describe(include='all').astype(str))
    
  • 长期最优方案:把本地Streamlit升级到1.20.0及以上版本,新版本已经修复了混合类型列的序列化兼容问题,不需要加任何额外处理,原代码就能正常运行。
  • 不想升级版本的适配方案:用st.dataframe替代st.write渲染表格,开启内置的混合类型自动转字符串配置
    st.dataframe(
        superstore_data.describe(include='all'),
        convert_mixed_types_to_str=True
    )
    

内容的提问来源于stack exchange,提问作者Muhammad Hafidz Alfarizi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 05:42:15