Pandas判断DataFrame索引包含指定值的if语句失效问题
问题原因
UserInput in excel的判断逻辑不符合预期,核心原因是:对pandas DataFrame直接使用in运算符时,默认检查的是DataFrame的列名,而非行索引。
也就是说你写的判断本质是在看输入的零件ID是不是刚好和某一列的列名重名,根本没去索引里匹配,所以哪怕ID真实存在于索引列,判断也会返回False,一直触发else分支。
修正方案
要判断输入值是否存在于行索引中,需要显式指定对索引对象做成员校验,把判断条件改成UserInput in excel.index即可。
另外你的原代码还有几个容易出问题的点:
- 定义文件路径时漏了字符串引号,运行会直接报NameError
- 先执行
excel.loc[UserInput]再做存在性判断,如果用户输入的ID真的不存在,这行代码会直接抛出KeyError导致程序崩溃 - 用户输入时容易带入前后空格,会导致明明ID存在却匹配失败
修正后的完整可运行代码:
import pandas as pd # 文件名要加引号作为字符串 file = "PartIdsWithVehicleData.csv" excel = pd.read_csv(file, index_col="ID", dtype={'ID': "str"}) UserInput = input("Enter a part number: ").strip() # 去掉输入前后的空白字符 # 先判断ID是否存在于索引中,再取结果 if UserInput in excel.index: result = excel.loc[UserInput] print(result) else: print("Part number is not in file.")
可选优化
如果你的CSV文件中存在重复的零件ID,直接用loc取值不会报错,如果要更严谨的判断,也可以用excel.index.isin([UserInput]).any()做存在性校验,逻辑和in excel.index一致,大文件下性能差异不大。
内容的提问来源于stack exchange,提问作者conrito345
相关产品推荐
相关产品推荐

