Pandas多条件筛选DataFrame报Lengths must match to compare错误
报错原因
报错来自条件判断里的写法错误:df['Type 1']== ['Fire'] 中你用来匹配的目标值写成了长度为1的列表,而非单个字符串值。
当你对Pandas的Series对象使用==做比较时,如果右侧传入的是列表、数组类的序列对象,Pandas会默认按位置逐行对齐做相等判断,此时要求两侧的长度完全匹配——你的DataFrame有800行,对应Series长度是800,但传入的列表长度只有1,长度无法对齐就会触发该ValueError。
你提前检查三列没有缺失值的排查方向是对的,但这个问题和缺失值无关,纯粹是比较对象的类型/长度不符合要求。
修复方案
去掉['Fire']外层的方括号,直接传入标量字符串做等值判断即可,修正后的可运行代码:
df.loc[(df['Type 1'] == 'Fire') & (df['HP'] > 70) & (df['Legendary'] == False)]
补充练习提示
- 布尔列的判断可以简化,
df['Legendary'] == False等价于~df['Legendary'],写法更简洁 - 只有当你需要匹配多个目标值的时候才需要用到列表,此时不能直接用
==,要调用.isin()方法,比如要同时筛选火、水两种属性的宝可梦,写法为:df['Type 1'].isin(['Fire', 'Water'])
内容的提问来源于stack exchange,提问作者Carla F
相关产品推荐
相关产品推荐

