如何在Pandas中根据年龄范围生成布尔列?代码报错求助
解决pandas中
ValueError: The truth value of a Series is ambiguous的问题 嘿,这个错误我太熟悉了——问题核心出在运算符优先级上!
你写的代码:
cf1p2['Age Check'] = (cf1p2['Age']>18 & cf1p2['Age']<60)
在Python中,位运算符&的优先级要高于比较运算符>和<。这意味着你的代码实际上被解释成了:
cf1p2['Age'] > (18 & cf1p2['Age']) < 60
这种错误的运算顺序会导致pandas试图把整个Series当作单个布尔值来处理,自然就抛出了那个“真值模糊”的错误——毕竟一个Series有多个元素,pandas不知道你是要判断所有元素为真、还是至少一个为真。
两种完美的解决方案:
方案1:给每个比较表达式加括号
明确让pandas先执行每个年龄的比较,再对结果做逻辑与操作:cf1p2['Age Check'] = (cf1p2['Age'] > 18) & (cf1p2['Age'] < 60)方案2:使用pandas内置的
between()方法
这个方法更简洁易读,还能灵活控制是否包含边界值:# 不包含18和60(和你的需求完全匹配) cf1p2['Age Check'] = cf1p2['Age'].between(18, 60, inclusive='neither') # 如果需要包含边界,可以调整参数: # inclusive='both' 包含18和60 # inclusive='left' 只包含18 # inclusive='right' 只包含60
这两种方法都能实现你要的:逐行判断Age列的值是否在18到60之间,并将结果存入Age Check列。
内容的提问来源于stack exchange,提问作者Husnain Iqbal
相关产品推荐
相关产品推荐

