Pandas中.apply()搭配lambda使用出现ValueError如何解决
报错原因
- 你代码的逻辑本身没有问题,如果
beers确实是元素为单值数值的Series类型,这段代码可以正常运行。出现你遇到的报错,核心原因是你实际的beers变量是DataFrame类型,而非你认为的Series。 - 对DataFrame调用
.apply()时,默认按列遍历,传入lambda的参数x是一整列的Series对象,此时执行x < 0得到的是布尔类型的Series,Python的if判断无法直接识别整个Series的真值,就会抛出该错误。 - 若你确认
beers是Series,需要检查Series中存储的是否是单值数值:如果元素是列表/数组等多值结构,beers.mean()计算后会返回多值,差运算后的每个x都是数组,x < 0返回布尔数组,同样会触发该报错。
修复方案
- 先确认你要处理的目标列名,从DataFrame中提取对应列转为Series后再执行逻辑,假设目标列名为
value,修改代码如下:
(beers['value'][:10] - beers['value'].mean()).apply(lambda x: 'low' if x < 0 else 'high')
- 更推荐使用向量化判断实现相同逻辑,无需调用
apply,性能提升非常明显:
import numpy as np diff = beers[:10] - beers.mean() result = np.where(diff < 0, 'low', 'high')
内容的提问来源于stack exchange,提问作者lyubol
相关产品推荐
相关产品推荐

