函数,该函数首先检查NaN,然后根据另一列替换值

2024-04-24 03:21:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图定义一个函数,该函数基于列“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)

Tags: 函数datareturnif定义def样品语句
2条回答

好的,我打开了一个python交互环境,发现需要使用~np.isnan(x['BsmtFinType1'])而不是!=。你知道吗

这是因为DF表示NaN与np在默认情况下略有不同,因为它们是不同的类型。你知道吗

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

以及

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

我最终修改了函数并使其工作。我用嵌套的if而不是make!= np.NaN公司它自己的如果。你知道吗

# Fill Basement Finishes
def fills_na(cols):
    fin = cols[0]
    subclass = cols[1]
    if pd.isnull(fin):
        if subclass < 60:
            return 'Unf'
        else:
            return 'GLQ'
    else:
        return fin

all_data['BsmtFinType1'] = all_data[['BsmtFinType1','MSSubClass']].apply(fills_na, axis = 1)

相关问题 更多 >