如何使用pandas.DataFrame.replace将单元格内指定列表替换为单个值
Pandas替换列表类型单元格值的解决方案
错误原因
你原代码df2['lockdown_level'].replace([1,2],4)不符合预期的核心原因是:pandas的replace方法接收单层列表作为to_replace参数时,会将列表内的每个元素作为独立匹配目标,也就是把所有值为1、值为2的单元格替换为4,不会将整个列表[1,2]作为匹配对象。
可用解决方案
方案1:apply自定义匹配逻辑(兼容性最好,逻辑清晰)
直接逐行判断单元格的值是否和目标列表相等,符合条件则替换:
x = df2['lockdown_level'].apply(lambda val: 4 if val == [1,2] else val)
方案2:调整replace参数实现匹配
如果要继续使用replace方法,需要把要匹配的列表[1,2]作为外层列表的单个元素传入,明确告知pandas匹配的是整个单元格值:
x = df2['lockdown_level'].replace(to_replace=[[1,2]], value=4)
两种方案执行后,列的唯一值都会输出你期望的1、2、3、4、[2,3]、[1,2,3]。
内容的提问来源于stack exchange,提问作者Jacob Wright
相关产品推荐
相关产品推荐

