用函数python替换nan值

时间:2021-02-25 11:53:20

标签: python-3.x function nan data-cleaning

我有一个大数据集 (100k+),其中的列比附加的代码段中的列多。我需要用参考表中的值替换缺失值。我找到了无数关于如何用相同数字替换 nan 值的文章,但找不到相关帮助来用从函数获得的不同值替换它们。我的问题是 np.nan 不等于 np.nan 那么我如何进行比较?我想说的是,如果该值为空,则将其替换为引用表中的特定值。我找到了下面显示的方法,但它是一种危险的方法,因为它仅将其替换为例外,因此如果出现任何问题,我将看不到它。这是片段:

sampleData = {
    'BI Business Name' : ['AAA', 'BBB', 'CCC', 'CCC','DDD','DDD'],
    'BId Postcode' : ['NW1 8NZ', 'NW1 8NZ', 'WC2N 4AA','WC2N 4AA', 'CV7 9JY', 'CV7 9JY',],
    'BI Website' : ['www@1', 'www@1', 'www@2', 'www@2','www@3', 'www@3'],
    'BI Telephone' : ['999', '999', '666', '001', np.nan, '12345']    
}
df = pd.DataFrame(sampleData)
df

这是我的方法:

feature = 'BI Telephone'
df[[feature]] = df[[feature]].astype('string')

def missing_phone(row):
    try:
        old_value = row[feature]
        if old_value == 'NaN' or old_value == 'nan' or old_value == np.nan or old_value is None or 
old_value == '':                   
            reference_value = row[reference_column]     
            new_value = reference_table[reference_table[reference_column]==reference_value].iloc[0,0]    
            print('changed')
            return new_value
        else: 
            print('unchanged as value is not nan. The value is {}'.format(old_value))
            return old_value        
    except Exception as e:
        reference_value = row[reference_column]     
        new_value = reference_table[reference_table[reference_column]==reference_value].iloc[0,0]    
        print('exception')    
        return new_value
        
df[feature]=df.apply(missing_phone, axis=1)
df

如果我不将数据类型更改为字符串,那么 nan 将保持不变。我该如何解决?

0 个答案:

没有答案