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

使用pandas计算新列时浮点数等值判断不匹配问题咨询

问题根因

该问题是浮点数精度误差导致的,属于计算机浮点数存储与运算的通用特性,和pandas、numpy的逻辑无关。

你看到的CPS Gross列两行都显示为0.05,只是pandas默认打印时截断了小数位,你可以执行以下代码打印更高精度的数值,就能看到明显差异:

print(df["CPS Gross"].apply(lambda x: format(x, '.20f')))

第二行的运算结果实际是和0.05极其接近但不完全相等的数值,所以用==做精确匹配时会判定不满足条件。
出现这个误差的原因是:0.05、236.05、82.35这类十进制小数,转成计算机底层存储的二进制浮点数时,会出现无限循环的情况,只能做近似存储,多次运算后误差就会显现出来。

解决方案

不要直接用==做浮点数的相等判断,改用近似匹配的方式即可:

  1. 用numpy内置的np.isclose方法,自动判断两个浮点数的差值是否在可接受的极小误差范围内:
conditions = [np.isclose(df["CPS Gross"], 0.05)]
values = [0.03]
df["CPS Calc"] = np.select(conditions,values)
  1. 如果业务上只需要判断保留固定位数后的结果是否相等,也可以先对CPS Gross做小数位截断再匹配:
# 示例保留2位小数后判断
conditions = [df["CPS Gross"].round(2) == 0.05]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:15:07