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

Pandas apply执行多条件if自定义函数全部返回No abc问题咨询

Pandas多条件判断不生效问题原因及解决方案

核心原因

  • 你使用pd.to_numeric时设置了errors = 'coerce',如果原始列存在无法转换为数值的内容,会被自动转换为NaN。而NaN和任何数值做比较运算的结果都为False,所有条件判断都不满足,最终全部返回else分支的No abc,这是最常见的诱因。
  • 你在自定义函数中用位置索引row[11]、row[12]取列,即使你确认当前索引正确,如果后续DataFrame列顺序发生变动,会出现取错列的问题,且不如列名取值直观可查。
  • 若转换后的数值为浮点类型,可能存在精度误差,比如实际值为0.0000000001或-0.0000000001,直接用==0判断会返回False,导致条件不触发。
  • 你做数值转换的列是df['abc_1']、df['abc_2'],要确认这两列的位置确实对应索引11、12,否则会出现取值和转换列不匹配的问题。

修复方案

  1. 首先检查转换后是否存在空值,如有空值按业务逻辑处理,比如填充为0:
# 查看空值数量
print(df[['abc_1', 'abc_2']].isna().sum())
# 空值填充为0
df['abc_1'] = df['abc_1'].fillna(0)
df['abc_2'] = df['abc_2'].fillna(0)
  1. 自定义函数改为用列名取值,避免位置索引带来的问题,同时优化浮点0值判断:
def abc(row):
    abc_1 = row['abc_1']
    abc_2 = row['abc_2']
    
    if abc_1>0 and abc_2>0:
        return 'abc 1 and 2'
    elif abc_1>0 and abs(abc_2) < 1e-9:
        return 'abc_1 only'
    elif abs(abc_1) < 1e-9 and abc_2>0:
        return 'abc_2 only'
    else: 
        return 'No abc'
  1. 重新执行apply逻辑即可:
    df.apply(abc, axis='columns')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:24:04