将 0 和 1 (float64) 转换为布尔值时将空值转换为 True [重复]

Posted

技术标签:

【中文标题】将 0 和 1 (float64) 转换为布尔值时将空值转换为 True [重复]【英文标题】:Null values converted to True when converting 0 & 1 (float64) to boolean [duplicate] 【发布时间】:2020-11-27 07:03:45 【问题描述】:

我正在处理从 excel 文件导入 Jupyter 笔记本的数据集。原始文件有一列包含 True 和 False 值。当转换为数据框时,这些值变成了 float64 类型的 0 和 1。该列也有一些缺失值。

我尝试使用将它们转换回布尔类型

.astype('bool')

很奇怪,我发现丢失的数据被转换为True。

为什么会这样??!!

我尝试通过仅选择 notnull() 值来避免这种情况,但类型更改为 Object not boolean

【问题讨论】:

【参考方案1】:

这是因为 everything 评估为 True空字符串 评估为 False。例如,您可以尝试以下操作:

List= ['True','False','False','False']
df= pd.DataFrame(List)

那么就可以使用map来正确切换值了:

df= df[0].map('False':False, 'True':True)

在您的情况下,您有 nan 值。因此:

import numpy as np
import pandas as pd

List = ['True','False','False','True','True',np.nan,'False']
df = pd.DataFrame(List)
df = df[0].map('False':False, 'True':True, np.nan:"")
df

输出:

0     True
1    False
2    False
3     True
4     True
5         
6    False
Name: 0, dtype: object

【讨论】:

我认为这仅适用于我有 True & False 的情况。我有 0 和 1 并想将它们转换为 true 和 false,然后所有的空值都变成了 true,所以我不知道映射哪个是空/null

以上是关于将 0 和 1 (float64) 转换为布尔值时将空值转换为 True [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 float64 列转换为 datetime pandas 时出错

pandas 数据框将 INT64 列转换为布尔值

在Julia时间将数据类型UInt64更改为Float

JAVA中一个float除以一个int变量,得到的结果精确到几位?

将 0 和 1 字符串转换为布尔值的最 Pythonic 方式是啥? [复制]

关于float在32位和64位的转换?