如何利用DataFrame变量信息通过Gradio下拉框实现数据输入?
问题原因与修复方案
核心问题点
- 代码使用了Gradio旧版API(
gr.inputs.Dropdown和["text"]输出定义),新版Gradio 3.x已弃用这些写法,兼容性问题导致提交挂起。 - 函数返回的字典类型与输出组件不匹配,Gradio无法正确解析返回值,引发阻塞。
修复后的完整代码
import gradio as gr import pandas as pd import json # 替换为你的CSV文件路径 file_path = "your_data.csv" df = pd.read_csv(file_path) variables = list(df.columns) df = df.dropna() options = {var: list(df[var]) for var in variables} save_variables = {} def assign_values(**kwargs): global save_variables save_variables.update(kwargs) # 将字典格式化为可读字符串返回 return json.dumps(kwargs, indent=2, ensure_ascii=False) # 使用新版Gradio组件定义输入 inputs = [gr.Dropdown(label=var, choices=options[var]) for var in variables] # 明确指定输出组件为文本框 outputs = gr.Textbox(label="已选中的值", lines=10) gr.Interface(fn=assign_values, inputs=inputs, outputs=outputs, title="Assign Values").launch()
关键修改说明
替换旧版输入组件:
把gr.inputs.Dropdown改为gr.Dropdown,新版Gradio已移除gr.inputs模块,直接使用顶级组件类。规范输出组件定义:
用gr.Textbox实例替代["text"]字符串,明确输出类型和显示配置(比如设置lines让结果更易读)。调整返回值格式:
用json.dumps把kwargs字典转换成格式化字符串,确保输出组件能正确接收并显示内容,避免类型不匹配导致的挂起。
额外优化建议
- 如果不需要全局保存选中值,可以删除
global save_variables和save_variables.update(kwargs)这两行代码,简化逻辑。 - 若CSV中存在重复选项,可以对
options[var]去重,比如list(set(df[var])),避免下拉框出现重复项。
内容的提问来源于stack exchange,提问作者Maracman
相关产品推荐
相关产品推荐

