You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何性能最差灵活性最低的Pandas applymap方法仍有使用场景?

我们来对比所有全场景适用的处理方法:

初始DataFrame:

import numpy as np
import pandas as pd
arr = np.random.randint(10, 50, size=(1000, 1000))
df = pd.DataFrame(arr)

Apply

%%timeit
df.apply(lambda x: x**3)

运行结果:

329 ms ± 117 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Transform

%%timeit
df.transform(lambda x: x**3)

运行结果:

352 ms ± 48 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

Applymap(性能表现极差)

%%timeit
df.applymap(lambda x: x**3)

运行结果:

1.07 s ± 59.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

问题解答

你看到的测试结果确实符合applymap的普遍表现,它之所以还被Pandas保留,主要有3个核心原因:

  • 逐元素处理的场景适配性
    apply、transform都是以行/列为单位传入数据,接收的参数是完整的Series对象,仅适配支持向量化运算的逻辑。但实际开发中经常会遇到只能接收单个标量值的处理函数:比如对每个元素做自定义类型校验、调用只能传单个值的第三方工具方法、对字符串/自定义对象做非向量化的属性读取等。这种场景下用applymap不需要额外在apply的逻辑里手动写循环遍历元素,代码写法最简洁直观。
  • API设计的逻辑一致性
    Pandas 1.x版本的API体系中,一维的Series结构已经提供了map方法实现逐元素处理,对应二维的DataFrame结构,推出applymap作为逐元素处理的方法,和Series的API形成对应关系,降低用户的学习理解成本。
  • 向后兼容的需求
    applymap从Pandas早期版本就已经存在,大量老旧项目、历史代码中都有使用,如果直接删除该方法会造成大规模的代码兼容性问题,属于破坏性极强的调整,Pandas开发组不会轻易做这类变更。

另外补充:从Pandas 2.1.0版本开始,applymap已经被官方标记为弃用,官方推荐直接使用DataFrame.map()方法替代它的逐元素处理能力,后续大版本更新中才可能会完全移除这个方法。

内容的提问来源于stack exchange,提问作者user17117975

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:18:01