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

Pandas调用apply做列条件替换时报Series真值歧义错误的原因

错误原因

  • 你代码中if data['Campaign Name'].isna()的判断对象是整个列的布尔Series,Python原生的if...else分支仅支持判断单个布尔值,无法直接处理一串布尔值的集合,系统无法确认你是要所有值为True才走if分支,还是任意一个为True就走if分支,因此抛出歧义错误。
  • 你误用了apply的逻辑:如果调用data.apply()时不指定axis=1,默认是按列遍历;就算指定了按行遍历,你在lambda里直接调用data['列名']也是取整个列的所有值,而非当前遍历行的对应字段值。

正确实现方式

你要实现的是逐行判断Campaign Name是否为空,为空则取同行Event Code,否则取Campaign Name,直接用Pandas向量化方法即可,不需要写apply:

# 方法1:用np.where,逻辑最直观
import numpy as np
data['target_col'] = np.where(data['Campaign Name'].isna(), data['Event Code'], data['Campaign Name'])

# 方法2:用pandas自带的where方法
data['target_col'] = data['Campaign Name'].where(data['Campaign Name'].notna(), data['Event Code'])

如果你一定要用apply实现(不推荐,性能远低于向量化方法),需要指定按行遍历,且取当前行的字段值:

import pandas as pd
data['target_col'] = data.apply(lambda x: x['Event Code'] if pd.isna(x['Campaign Name']) else x['Campaign Name'], axis=1)

内容的提问来源于stack exchange,提问作者Gwen Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:18:03