如何将存储带格式True/False的Object类型列转为1和0?
问题根源
你的目标变量字符串自带前导空格和末尾的英文句号(比如' False.'),和你写的匹配规则里的纯'False'/'True'完全不匹配,这就是之前所有方法失效的原因:
map/replace找不到对应匹配项,会返回NaN- 直接
astype(bool)会把任何非空字符串判定为True,最终全转成1
解决方案
先清理字符串,再转换为0/1,以下几种方法都可行:
方法1:先清理再映射
# 先去除前后空白,再去掉末尾的句号 df_new['Y_var'] = df_new['Y_var'].str.strip().str.rstrip('.') # 再用map转换 df_new['Y_var'] = df_new['Y_var'].map({'True': 1, 'False': 0})
方法2:一步到位的替换
df_new['Y_var'] = df_new['Y_var'].str.strip().str.rstrip('.').replace(['False', 'True'], [0, 1])
方法3:直接布尔判断转整数
# 清理后判断是否等于'True',再转成整数 df_new['Y_var'] = (df_new['Y_var'].str.strip().str.rstrip('.') == 'True').astype(int)
验证结果
处理后可以用df_new['Y_var'].unique()查看,应该只会返回[0,1]两个值,确认转换成功。
内容的提问来源于stack exchange,提问作者dsnoob27
相关产品推荐
相关产品推荐

