使用Pandas替换survival_status列值异常:全部变为Negative问题求助
解决Pandas替换列值全变为Negative的问题
看来你遇到的问题是用apply+lambda替换survival_status值时,所有结果都变成了Negative,核心原因大概率是数据类型不匹配或者列中实际值和你判断的数值不一致,下面一步步帮你解决:
第一步:先排查问题根源
先运行下面的代码,确认survival_status列的数据类型和实际存在的唯一值:
# 查看列的数据类型 print(Haberman["survival_status"].dtype) # 查看列中所有唯一值 print(Haberman["survival_status"].unique())
如果输出的类型是object(字符串类型),或者唯一值里是'1'、'2'(带引号的字符串),那就是你的判断条件x == 2(整数比较)永远不成立,所以所有值都走了else分支变成Negative。
第二步:针对性修复代码
根据排查结果选择对应的方案:
方案1:直接匹配字符串值(如果列是字符串类型)
把判断条件里的整数改成字符串:
Haberman["survival_status"] = Haberman["survival_status"].apply(lambda x : 'Positive' if x == '2' else 'Negative')
方案2:先转成数值型再替换
先把列转换为整数类型,再用你原来的逻辑:
# 先转换数据类型 Haberman["survival_status"] = Haberman["survival_status"].astype(int) # 再执行替换 Haberman["survival_status"] = Haberman["survival_status"].apply(lambda x : 'Positive' if x == 2 else 'Negative')
方案3:更推荐的replace方法
Pandas自带的replace方法更简洁,且不容易出现类型匹配问题,直接用字典映射替换:
# 如果列是数值型 Haberman["survival_status"] = Haberman["survival_status"].replace({1: 'Negative', 2: 'Positive'}) # 如果列是字符串型 Haberman["survival_status"] = Haberman["survival_status"].replace({'1': 'Negative', '2': 'Positive'})
为什么原来的代码失效?
当survival_status列是字符串类型时,你用整数2和字符串值比较(比如'2' == 2),结果永远是False,所以所有值都会触发else分支,变成Negative。通过先排查数据类型和实际值,就能快速定位问题啦~
内容的提问来源于stack exchange,提问作者merklexy
相关产品推荐
相关产品推荐

