Pandas DataFrame存在匹配值但条件筛选返回空结果的异常排查
异常原因
这个问题的核心是数据类型不匹配:
你DataFrame里userID列存储的值是字符串格式,而筛选时传入的是整数196,Python里字符串'196'和整数196做等值判断会返回False,所以布尔索引全为假,最终返回空DataFrame。
Surprise库加载内置ml-100k数据集时,raw_ratings属性里存储的用户ID、物品ID默认都是字符串类型,你直接基于这个属性构造DataFrame时没有做类型转换,就会出现"明明看到值存在却筛不出来"的现象。
验证方法
执行以下代码即可确认问题:
# 查看userID列的整体数据类型 print(df['userID'].dtype) # 查看第一条记录userID值的实际类型 print(type(df.iloc[0]['userID']))
运行后你会看到列类型为object(pandas存储字符串的默认dtype),单值类型为str,而非预期的整数类型。
修复方案
二选一即可:
- 筛选时使用字符串值做匹配
# 传入字符串'196'匹配 df[df['userID'] == '196']
- 提前将ID列转换为整数类型,后续可直接用整数筛选
# 转换两列ID的类型 df['userID'] = df['userID'].astype(int) df['itemID'] = df['itemID'].astype(int) # 再执行原筛选语句即可正常返回结果 df[df['userID'] == 196]
内容的提问来源于stack exchange,提问作者DanielTheRocketMan
相关产品推荐
相关产品推荐

