首页 > 解决方案 > Python:Pandas 模块 - 在数据框中填充 NaN(空值)的嵌套 IF 语句

问题描述

我创建了一个函数,该函数在给定“名称”列中的数据的情况下测试多个 IF 语句。

标准 1:如果 'Name' 为空,则返回 'Secondary_Name'。但是,如果“Secondary_Name”也为空,则返回“Third_Name”。

标准 2:如果 'Name' == 'GENERAL',则返回 'Secondary_Name'。但是,如果“Secondary_Name”也为空,则返回“Third_Name”

其他:返回“名称”

def account_name(row):
    if row['Name'] == None and row['Secondary_Name'] == None:
        return row['Third_Name']

    elif row['Name'] == 'GENERAL':
        if row['Secondary_Name'] == None:
            return row['Third_Name']

    else:
        return row['Name']

我试过 == None,== np.NaN,== Null,.isnull(),== '',== '0'。

似乎没有什么可以将空值替换为我想要的。

编辑:

DF 示例

标签: python-3.xpandasdataframenull

解决方案


根据列 dtype,无论出于何种原因,NULL 都不能与 NaN 很好地交互。None 表示该字段为空白,这不是因为您对给定的 dtype 具有“值”。

确保您可以识别 NaN 的简单方法是查看该字段是否等于自身

def isNaN(value):
if value != value: 
    return True
else:
    return False

并提供一个例子:

df = pd.DataFrame(data={'ClientId':[1,2,3,4] , 'SomeNULLs':['main','main',None,None], 'NewNULLs':[1,None,0,1]})

df['Test'] = df.NewNULLs.apply(isNaN)

结果数据集应该是

   ClientId SomeNULLs  NewNULLs   Test
0         1      main       1.0  False
1         2      main       NaN   True
2         3      None       0.0  False
3         4      None       1.0  False

推荐阅读