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,否则会出现取值和转换列不匹配的问题。
修复方案
- 首先检查转换后是否存在空值,如有空值按业务逻辑处理,比如填充为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)
- 自定义函数改为用列名取值,避免位置索引带来的问题,同时优化浮点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'
- 重新执行apply逻辑即可:
df.apply(abc, axis='columns')
内容的提问来源于stack exchange,提问作者R Sta
相关产品推荐
相关产品推荐

