Pandas根据另一列值更新列时报KeyError: 'name'的问题排查
错误原因
- 未指定
apply遍历维度:pandas的apply方法默认按列遍历,此时传入lambda的参数x是单列Series,不存在name索引,因此抛出KeyError: 'name'。如果要按行遍历,必须添加axis=1参数。 - else分支返回值错误:你在else分支返回了完整的
df['action']列,而非当前行的action值,即便补全axis=1也无法得到正确结果。 - 方法误用:第二种写法中
x['name']是单个字符串,没有isin()方法(isin()为Series对象的专属方法),单值判断直接使用in关键字即可。
正确实现
写法1:修正apply逻辑(适用于复杂行级判断场景)
df['action'] = df.apply(lambda x: 'removed' if x['name'] in name_list else x['action'], axis=1)
写法2:向量化操作(性能更优,推荐优先使用)
无需调用apply做行遍历,直接通过布尔索引定位目标行修改即可,数据量较大时性能远高于行遍历方案:
df.loc[df['name'].isin(name_list), 'action'] = 'removed'
内容的提问来源于stack exchange,提问作者Tristan Tran
相关产品推荐
相关产品推荐

