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

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

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

.astype('bool')

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

为什么会这样??!!

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

【问题讨论】:

    标签: python excel pandas jupyter-notebook


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2013-10-07
    • 2014-09-03
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多