Pandas使用.loc赋值时触发KeyError:无法用单个布尔值索引赋值
问题解决:Pandas筛选包含指定字符串的行并赋值
原代码报错原因
'CDD1' in Base['col']返回的是单个布尔值(仅判断该值是否存在于整列中),而loc进行赋值操作时,需要的是与DataFrame行数匹配的布尔数组(标记每一行是否符合条件),因此触发KeyError: 'cannot use a single bool to index into setitem'。
正确实现方式
要筛选col列中包含字符串CDD1的所有行并给test列赋值abc,需使用Pandas的str.contains()方法生成匹配每行的布尔数组:
Base.loc[Base['col'].str.contains('CDD1'), 'test'] = "abc"
补充:处理缺失值
如果col列存在缺失值(NaN),可以添加na=False参数避免警告或错误(将缺失值视为不匹配):
Base.loc[Base['col'].str.contains('CDD1', na=False), 'test'] = "abc"
内容的提问来源于stack exchange,提问作者Grzegorz Szymala
相关产品推荐
相关产品推荐

