如何解决StreamlitAPIException:FG%列转换失败,期望字节却获得int对象
问题排查与解决方法
错误原因定位
这个报错的核心原因是FG%列的数据类型是pandas的object混合类型,列内同时存在字符串、整数、空值等多种类型数据,Streamlit渲染DataFrame时无法统一做类型转换,才会触发类型不匹配异常。
排查步骤
- 在
st.dataframe(df_selected_team)代码前插入调试代码,确认列的混合类型情况:
# 打印列类型 print(df_selected_team['FG%'].dtype) # 打印随机10条样本值 print(df_selected_team['FG%'].sample(10)) # 统计列内存在的数据类型占比 print(df_selected_team['FG%'].apply(type).value_counts())
- 回溯数据清洗逻辑,确认
FG%列是否存在未处理的百分比符号、空值被填充为整数、异常字符串未替换等问题。
解决方法
方法1:统一转换为数值类型(推荐)
如果需要对FG%做数值计算,可将列统一转换为浮点型:
# 先去除百分比符号,再转数值,无法转换的异常值自动设为空值 df_selected_team['FG%'] = pd.to_numeric(df_selected_team['FG%'].astype(str).str.replace('%', ''), errors='coerce') # 可选:如果需要保留百分比语义,可转成小数格式 # df_selected_team['FG%'] = df_selected_team['FG%'] / 100
方法2:统一转换为字符串类型
如果不需要对FG%做数值计算,可直接统一转为字符串类型规避混合类型问题:
df_selected_team['FG%'] = df_selected_team['FG%'].astype(str)
方法3:渲染时指定列格式(适用于Streamlit 1.20及以上版本)
不需要修改原数据,直接在渲染时指定列格式即可:
st.dataframe(df_selected_team, column_config={ "FG%": st.column_config.NumberColumn(format="%.2f %%") })
修改完成后重新运行应用即可正常渲染DataFrame。
内容的提问来源于stack exchange,提问作者Rafael99
相关产品推荐
相关产品推荐

