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

在Streamlit应用中添加滑块调整模型输入时遇KeyError问题求助

Streamlit滑块创建时KeyError问题解决

问题场景

在Streamlit中尝试通过字典创建滑块调整模型输入值,DataFrame以唯一城市名为索引,列均为浮点型数据。运行代码时触发KeyError: <class 'numpy.float64'>,错误指向st.slider所在行。

用户代码

df = pd.DataFrame({'city': ['London', 'Bedford'], 'Value_1': [0.256, 0.425], 'Value_2': [0.859, 0.956]})
df = df.set_index('city')

def display_sliders():
        sliders = {}
        for col in df.columns:
            min_val = df[col].min()
            max_val = df[col].max()
            val = df[col].loc[selected_city]
            sliders[col] = st.slider(col, min_value=min_val, max_value=max_val, value=val)
        return sliders

# Display the slider widgets
sliders = display_sliders()

错误信息

KeyError: <class 'numpy.float64'>

问题原因

  1. selected_city类型不匹配:代码中未定义selected_city,若实际使用时该变量被赋值为numpy.float64类型(而非DataFrame索引中的字符串城市名),.loc[]无法匹配字符串索引,直接触发KeyError。
  2. 数值类型兼容性:df[col].loc[selected_city]返回的是numpy.float64类型,与Streamlit滑块的参数类型存在潜在兼容问题。

解决方案

修改后的完整代码

import streamlit as st
import pandas as pd

df = pd.DataFrame({'city': ['London', 'Bedford'], 'Value_1': [0.256, 0.425], 'Value_2': [0.859, 0.956]})
df = df.set_index('city')

# 添加城市选择控件,确保selected_city为字符串类型的城市名
selected_city = st.selectbox("选择城市", df.index.tolist())

def display_sliders():
    sliders = {}
    for col in df.columns:
        min_val = df[col].min()
        max_val = df[col].max()
        # 将numpy浮点值转为Python原生float,消除类型兼容问题
        val = float(df[col].loc[selected_city])
        sliders[col] = st.slider(col, min_value=min_val, max_value=max_val, value=val)
    return sliders

# 显示滑块控件
sliders = display_sliders()

关键修复点

  • 通过st.selectbox明确获取字符串类型的城市名,确保selected_city与DataFrame索引类型完全匹配。
  • 将val转为Python原生float类型,解决Streamlit滑块与numpy数值类型的潜在冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 12:10:25