Pandas用lambda函数根据其他列赋值出现Series真值模糊报错如何修复
问题修复方案
你的猜测是正确的,报错核心是你在apply的lambda函数中直接调用了test["Coupa Type"],这个语句返回的是整列的Series对象,Python无法直接对一整列数据返回单个布尔判断结果,因此抛出了对应错误。
修复方法(优先lambda、无额外依赖)
你只需要做两处修改:
- 给
apply方法添加axis=1参数,指定pandas按行遍历数据,每次将单行数据传入lambda函数 - lambda函数内从传入的单行对象
x中取Coupa Type列的值,而非从全局的test表取整列值
修复后代码如下:
test = raw[["Coupa Type", "Structured Pos"]] test["Structured Pos"] = test.apply( lambda x: "Freeform" if x["Coupa Type"] == "freeform" else "Structured PO", axis=1 )
补充优化方案(非lambda、效率更高)
如果你的数据量较大,逐行apply的执行效率会低于向量化操作,你也可以用pandas原生的条件赋值实现相同效果,无需导入额外依赖:
test = raw[["Coupa Type", "Structured Pos"]] # 先给所有行赋默认值 test["Structured Pos"] = "Structured PO" # 再给符合条件的行覆盖赋值 test.loc[test["Coupa Type"] == "freeform", "Structured Pos"] = "Freeform"
内容的提问来源于stack exchange,提问作者Asrakh
相关产品推荐
相关产品推荐

