我有一个大数据集 (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 将保持不变。我该如何解决?