Python使用pandas搜索Excel列字符串仅匹配第一行问题咨询
问题根因
你的函数存在强制提前退出的逻辑错误:你将不匹配的返回分支写在了for循环内部,每次循环只会判断第一行(索引为0)的内容,只要第一行和输入不匹配,就会直接执行else分支的return语句终止函数,永远不会遍历后续的行,因此只能匹配到第一行的ABC,其余行的内容永远不会被检索到。
同时你的代码还存在两个隐性问题:
- 循环中每次不匹配都会把同一个输入添加到
unknown列表,若遍历全量行,同一个输入会被重复添加多次 - 函数内的返回变量名和函数名同为
link_url,会导致函数本身被变量覆盖,后续无法再次调用该函数
修复方案
调整逻辑为遍历完所有行后仍无匹配结果再返回未知提示,优化后的代码如下:
def link_url(): df = pd.read_excel('Links.xlsx') input_content = e.get() # 提前提取一次用户输入,避免循环重复取值 for i in df.index: if input_content in df['Name'][i]: print(df['Name'][i]) link_res = df['Link'][i] known.append(input_content) return link_res # 循环正常结束代表无匹配结果 unknown.append(input_content) return "I will search and return back to you"
优化说明
- 所有行都会被遍历检索,不再仅判断第一行内容
- 同一个输入只会被添加一次到
known或unknown列表,不会重复添加 - 调整返回变量名为
link_res,避免和函数名重名导致函数被覆盖 - 提前提取用户输入,减少循环中重复调用接口的开销
内容的提问来源于stack exchange,提问作者Etchosh
相关产品推荐
相关产品推荐

