如何校验用户输入ID列表是否全部存在于pandas DataFrame指定列中
错误原因分析
- 第一版代码报错原因:
in运算符要求判断的元素是可哈希类型,你直接传入列表IDs做判断,列表属于不可哈希类型,自然会抛出unhashable type: 'list'错误,且该写法本身不符合pandas的Series判断逻辑。 - 第二版代码逻辑错误:
df["ID Number"].isin(IDs)的作用是判断df中每一行的ID是否存在于用户输入的IDs列表里,返回的布尔序列长度和df行数一致,调用.all()要求df所有ID都在用户输入列表中,你的示例df里还有GH87955、AS14536两个ID不在用户输入的IDs里,自然永远返回False,完全和你的需求逻辑相反。
正确实现方案
方案1:集合子集判断(推荐,小数据量场景更简洁)
直接把用户输入的ID和df的ID列做集合子集判断即可:
if not set(IDs).issubset(set(df["ID Number"])): # 执行ID未全部匹配的对应操作 print("您输入的ID未全部匹配,请检查后重新输入")
方案2:Pandas原生方法(适合超大数据量场景)
把用户输入的ID转成Series,再判断每个ID是否在df的ID列中,再对结果取all:
import pandas as pd if not pd.Series(IDs).isin(df["ID Number"]).all(): # 执行ID未全部匹配的对应操作
内容的提问来源于stack exchange,提问作者Gingerhaze
相关产品推荐
相关产品推荐

