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

如何利用Tkinter用户输入筛选Pandas DataFrame中的指定数据?

解决Tkinter输入筛选Pandas DataFrame的问题

你的代码出现空值结果主要有三个核心问题,以下是修正方案和关键说明:

问题1:Entry组件初始化错误

Entry(page1, width=100).grid(...) 这种写法会让mfa2等于grid()的返回值None,而非Entry对象,导致后续无法获取用户输入。必须拆分创建和布局步骤:

# 先创建Entry对象,再单独执行布局
mfa2 = Entry(page1, width=100)
mfa2.grid(row=0, column=6)

问题2:未获取用户输入内容

筛选时直接用mfa2(此时是None)和DataFrame列比较,结果全为False,导致返回空值。需要用mfa2.get()获取输入框的实际文本:

df = pd.read_csv('d://new.csv')
# 获取输入并去除前后空格,避免空格干扰匹配
input_city = mfa2.get().strip()

问题3:Pandas筛选方式错误

你使用了df.Where(注意是大写W,正确方法是小写df.where()),且where默认会保留原行,不匹配的设为NaN。如果要直接得到匹配的行,更常用的是布尔索引:

方案一:布尔索引筛选(推荐)

# 直接筛选匹配城市的行
filtered_df = df[df["city"] == input_city]
# 若要替换原DataFrame,直接赋值
# df = df[df["city"] == input_city]

方案二:正确使用where方法

如果坚持用where,需要后续删除空值行:

filter_condition = df["city"] == input_city
df.where(filter_condition, inplace=True)
# 删除不匹配的空值行
df = df.dropna()

补充:优化筛选体验

  • 模糊匹配:如果需要支持包含关键词、不区分大小写的筛选,可以这样写:
input_city = mfa2.get().strip().lower()
filtered_df = df[df["city"].str.lower().str.contains(input_city)]
  • 触发时机:筛选逻辑要绑定到按钮点击事件,避免在Entry创建后立即执行(此时用户还未输入):
def filter_data():
    input_city = mfa2.get().strip()
    df = pd.read_csv('d://new.csv')
    filtered_df = df[df["city"] == input_city]
    # 这里可添加结果展示逻辑,比如打印或显示在Tkinter组件中
    print(filtered_df)

# 创建筛选按钮
Button(page1, text="筛选", command=filter_data).grid(row=1, column=6)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:28:15