首页 > 解决方案 > 首先检查 NaN,然后​​根据另一列替换值的函数

问题描述

我正在尝试定义一个函数,该函数根据“MSSubClass”列的值替换“BsmtFinType1”中的值。但是,我希望它首先检查以确保“要替换的值”是 NaN。如果它有一个值,它不会替换它。我不完全确定为什么我的样本不起作用。运行后,没有任何值更新。如果我删除第一个“If”语句,它会运行并替换值就好了。有任何想法吗?

# Fill Basement Finishes
def fills_na(x):
    if x['BsmtFinType1'] != np.NaN:
        return x['BsmtFinType1']
    elif x['MSSubClass'] < 60:
        return 'Unf'
    else:
        return 'GLQ'

all_data['BsmtFinType1'] = all_data.apply(lambda x: bsmt_fin(x), axis=1)

标签: pythonnumpyif-statement

解决方案


好的,我打开了一个python交互环境,发现需要使用~np.isnan(x['BsmtFinType1'])代替!=.

造成这种情况的原因是因为 DF 表示 NaN 与 np 默认情况下略有不同,因为它们是不同的类型。

>>> type(np.NaN) 
class 'float'

>>> type(df['one']['d']) 
class 'numpy.float64'

推荐阅读