Python pandas中map与applymap的工作机制差异疑问
pandas中apply、applymap的区别说明
你的理解完全正确,两者的核心作用逻辑差异如下:
applymap仅作用于DataFrame对象,执行时会遍历DataFrame的每一个单元格标量值,将单个值传入你定义的函数执行运算。
你写的df.applymap(lambda f: f*2 if f < 7 else f)可以正常运行,就是因为每次传入lambda的f都是单个数值,f<7的判断返回单个布尔值,符合if条件的要求。apply作用于DataFrame时,默认将整列作为一个完整的Series对象传入函数(调整axis=1可改为按整行传入),不会直接操作单个标量值。
你第一次写的df.apply(lambda f: f*2)没有报错,是因为Series本身支持和数值做广播运算,整列乘2的操作合法,最终结果和applymap执行效果一致。但第二个逻辑中f <7的判断对象是整列Series,返回的是一组布尔值,无法直接作为if语句的判断条件(if要求输入单个布尔值),因此触发报错。
额外补充你提到的map方法的逻辑:map仅适用于Series对象,作用逻辑和applymap一致,遍历Series的每个标量值执行传入的函数。如果想要用apply实现和第二个applymap一致的效果,可以嵌套一层map处理单列的每个值,写法如下:
df.apply(lambda col: col.map(lambda f: f*2 if f <7 else f))
内容的提问来源于stack exchange,提问作者Hasan Malik
相关产品推荐
相关产品推荐

