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

Python中将Yes/No转换为1/0失败求助:所有值均转为1

解决Y/N列转换为0/1时全变为1的问题

看起来你的问题核心是目标列的字符串里藏着前导/尾随空格,导致你写的x=='N'判断永远不成立,所有值都走到了else分支变成1。从你贴的数据输出里能看到,每个值前面都有空格(比如 1 N里的N前面带空格),这就是问题的根源。

下面是具体的排查和解决步骤:

第一步:确认问题根源

先执行这段代码,看看去重后的值到底是什么:

print(sample['colval'].str.strip().unique())

如果输出是['N' 'Y'],就实锤了原数据的字符串带空格,直接判断x=='N'肯定匹配不上。

第二步:修复转换逻辑

这里给你三种可行的解决方案:

方案一:在原有lambda里加空格处理

修改你原来的代码,对每个值先做strip()去除前后空格再判断:

sample['colval'] = sample['colval'].apply(lambda x: 0 if x.strip() == 'N' else 1)

方案二:先清洗列再映射(更清晰)

先整列清洗掉空格,再用字典做映射,可读性更强,还能发现异常值:

# 第一步:清洗列,去除所有前后空格
sample['colval'] = sample['colval'].str.strip()
# 第二步:用字典把N/Y转成0/1(非N/Y的值会变成NaN,方便排查)
sample['colval'] = sample['colval'].map({'N': 0, 'Y': 1})

方案三:用numpy.where简化代码

如果你习惯用numpy的工具,这种写法更简洁高效:

import numpy as np
sample['colval'] = np.where(sample['colval'].str.strip() == 'N', 0, 1)

第三步:验证转换结果

最后执行这段代码确认结果是否符合预期:

print(sample['colval'].value_counts())

按照你给的示例数据,应该会输出0 18和1 2,说明转换完全正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:11:21