Pandas中astype将object转为boolean时全返回True的问题求助
解决DataFrame中Object类型转Boolean时False被转为True的问题
嘿,这个坑我之前踩过!你遇到的问题核心原因很明确:你的isgood列里的True和False并不是原生的布尔值,而是以字符串形式存储的'True'和'False'。当你直接用astype(bool)转换字符串时,Python的规则是「非空字符串即True」——哪怕是字符串'False',因为它不是空字符串,所以会被判定为True,这就是为啥原来的False全变成True了。
给你几个靠谱的解决方法:
方法一:直接字符串对比(最直观)
直接判断每个元素是否等于字符串'True',返回原生布尔值:
df['isgood'] = df['isgood'] == 'True'
这个方法简单粗暴,结果绝对准确,适合确定列中只有'True'/'False'两种字符串值的场景。
方法二:用map手动映射
如果需要更灵活的对应关系(比如还有其他特殊值需要处理),可以用map函数明确指定映射规则:
df['isgood'] = df['isgood'].map({'True': True, 'False': False})
要是遇到不在映射表里的值,还可以加个na_action='ignore'参数跳过或者处理空值。
方法三:先转数值再转布尔
利用pd.to_numeric把字符串'True'转成1,'False'转成0,再转布尔类型:
df['isgood'] = pd.to_numeric(df['isgood'], errors='coerce').astype(bool)
这里errors='coerce'会把无法转成数值的内容变成NaN,如果你有其他异常值需要处理,这个方法会更稳妥。
补充说明
为啥astype(bool)不行?因为在Python中:
bool('True') # 返回True bool('False') # 也返回True! bool('') # 只有空字符串才返回False
这是字符串类型布尔判断的固有规则,所以直接用astype(bool)处理字符串类型的布尔值肯定会出错。
内容的提问来源于stack exchange,提问作者Cody
相关产品推荐
相关产品推荐

