Pandas函数内循环无法终止求助:基于用户输入筛选DataFrame行
问题分析与代码修正
核心问题1:外层循环无法终止
你的条件判断if Op1 and Op2 in Ndata[" workclass"]:逻辑错误,Python会将其解析为if (Op1) and (Op2 in Ndata[" workclass"])——只要Op1不是空字符串(用户输入默认非空)且Op2在目标列中,就会触发条件,但这不符合你“两个输入都必须在列中”的需求。正确写法需要分别判断两个值是否存在:
if Op1 in Ndata[" workclass"] and Op2 in Ndata[" workclass"]:
核心问题2:内层循环逻辑失效
if Op3 == 1 or 2 :的写法完全错误,Python会将2视为布尔值True,导致这个条件永远成立,不管用户输入什么都会直接退出内层循环。同时内层循环缺少重新获取输入的逻辑,用户输入错误后无法修正。正确写法如下:
if Op3 == 1 or Op3 == 2:
修正后的完整代码
def option3(): print("---------------------------") print("please select from the following options") print(Ndata[" workclass"].unique()) print("---------------------------") loop3 = True while loop3: print("---------------------------") Op1 = input('Please enter first working class: ') Op2 = input('Please enter second working class: ') print("Options selected ", Op1, "&", Op2) print("---------------------------") # 修正外层条件判断逻辑 if Op1 in Ndata[" workclass"] and Op2 in Ndata[" workclass"]: loop3 = False sub = Ndata.loc[Ndata[" workclass"].isin([Op1, Op2])] print("---------------------------") print("Please select from the following") print("[1] Most educated countries ") print("[2] Marital status ") print("---------------------------") loop4 = True while loop4: Op3 = int(input("Please enter 1 or 2 : ")) # 修正内层条件判断逻辑 if Op3 == 1 or Op3 == 2 : loop4 = False else: print('Please select 1 or 2') else: print("Please check", Op1, "&", Op2, " are in the working class") print(Ndata[" workclass"].unique())
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

