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

如何在pandas apply的lambda函数内添加条件判断规避除零报错

实现方案

1. lambda内直接实现(仅调整原有写法)

Python支持在lambda中嵌套三元表达式,可以直接完成判断逻辑,注意不要直接判断浮点数等于0,要使用math.isclose规避浮点数精度问题:

d["direction"] = d.apply(
    lambda x: 180 if m.isclose(m.atan2(x.water_u, x.water_v), 0) 
    else 180 + 180/(m.pi * m.atan2(x.water_u, x.water_v)), 
    axis=1,
    result_type="expand"
)

2. 更高效的向量化实现(推荐)

逐行apply在数据量较大时性能很低,完全可以用Pandas/Numpy的向量化操作替代,不需要写lambda也不需要自定义函数,性能提升可达数十倍:

import numpy as np

# 先批量计算所有atan2结果
angle = np.arctan2(d['water_u'], d['water_v'])
# 向量化判断并生成结果
d['direction'] = np.where(
    np.isclose(angle, 0),
    180,
    180 + 180/(np.pi * angle)
)

注意事项

  • 浮点数运算存在精度误差,直接用==0判断几乎无法命中实际计算中接近0的场景,isclose方法可以通过rtol、atol参数自定义判定接近0的公差阈值,适配不同业务需求。
  • 向量化方案避免了Python层的逐行循环,所有运算都在Numpy底层完成,是Pandas场景下更推荐的高效写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:39:00