pd.to_numeric处理布尔值下转浮点时NA改变输出的原因及实现方法
pd.to_numeric相关问题解答
为什么列中引入NA后pd.to_numeric的输出结果发生变化
这是pandas对不同dtype列的处理逻辑差异导致的:
- 原生
booldtype的列无法存储NA值,当列中插入None/NA时,pandas会自动将整列的dtype提升为object,用来兼容布尔值和空值 pd.to_numeric处理纯booldtype的列时,会直接返回原列不做类型转换,所以你第一个示例的输出还是bool类型的Falsepd.to_numeric处理objectdtype的列时,会逐个解析元素:布尔值会被映射为对应的数值(False=0,True=1),空值会被errors='coerce'转为NaN,最终输出float类型的结果
如何用pd.to_numeric将bool类型列转为float,实现False转0、True转1
你只需要先把bool列强制转为object dtype,再调用pd.to_numeric即可,不管列中有没有NA都能得到预期结果:
# 针对你的第一个纯布尔列示例 data = {'Name':['Tom', 'nick', 'krish', 'jack'], 'Age':[False, False, False, False]} df = pd.DataFrame(data) # 先转object再调用to_numeric res = pd.to_numeric(df['Age'].astype(object), errors='coerce', downcast = 'float') print(res)
输出结果为:
0 0.0 1 0.0 2 0.0 3 0.0 Name: Age, dtype: float32
如果你不需要强制使用pd.to_numeric,直接用df['Age'].astype('float32')也可以实现同样的转换效果。
内容的提问来源于stack exchange,提问作者Suraj Tripathi
相关产品推荐
相关产品推荐

