pandas apply 与向量化

639 字
3 分钟
pandas apply 与向量化

pandas apply 与向量化#

apply 很好用,但不应该成为处理每一列的默认方式。pandas 的优势在于向量化操作,能用内置字符串、数值、日期方法时,通常比逐行 apply 更快、更清晰。

我的原则是:先找向量化写法,找不到再考虑 apply。

向量化优先#

df["name"] = df["name"].str.strip()
df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
df["is_large"] = df["amount"] >= 1000

这些操作不需要逐行函数,pandas 已经提供了专门的方法。

apply 适合什么场景#

当逻辑确实依赖多列组合,且向量化表达过于绕时,可以用 apply(axis=1)。但要意识到它通常更慢,数据量大时需要重新设计。

def label(row):
if row["amount"] >= 1000 and row["vip"] == 1:
return "high_value"
return "normal"
df["label"] = df.apply(label, axis=1)

可以替代 apply 的写法#

import numpy as np
df["label"] = np.where(
(df["amount"] >= 1000) & (df["vip"] == 1),
"high_value",
"normal",
)

条件分支简单时,np.where 或 np.select 更适合。

判断标准#

  • 数据量很小,以可读性为主,可以接受 apply。

  • 数据量很大,优先向量化或分块处理。

  • 逻辑涉及外部 API 或文件 IO,不适合直接在 apply 里跑。

  • 写完后用小样本手动验证几行结果。

实战复盘#

写《pandas apply 与向量化》这类数据分析文章时,我会强制保留“检查点”。因为数据分析里最危险的不是报错,而是代码顺利跑完却得到错误结论。

一个合格的 pandas 步骤,至少要能回答:输入多少行、输出多少行、哪些字段被修改、失败值有多少、是否有样本可以人工复核。缺少这些信息,代码就很难进入正式流程。

如果以后把这些文章串成系列,可以按读取、检查、清洗、变换、统计、导出排列。这样读者能从原始数据一路走到可交付结果。

最小验收样例#

验收《pandas apply 与向量化》时,我会手写一个三到五行的小 DataFrame:一行正常数据,一行缺失或异常数据,一行边界数据。先让示例在小表上跑通,再换成完整数据集。

小表的好处是结果可以人工计算。只要人工结果和 pandas 输出对不上,就说明代码逻辑或字段口径还没想清楚。这个过程比直接在大表上调试更可靠。

小结#

apply 不是不能用,而是要知道它的成本。能向量化就向量化,复杂业务逻辑再用 apply 保持清晰。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

pandas apply 与向量化
https://blog.tjcheng.cn/posts/backfill/2026-05-19/pandas-apply-vectorize-note/
作者
TengJinCheng
发布于
2026-05-19
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
TengJinCheng
Hello, I'm Teng.
公告
欢迎来到TengJinCheng工作铺!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
157
分类
7
标签
114
总字数
109,939
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.4
文章许可
CC BY-NC-SA 4.0

文章目录