根据条件使用值字典nased更新NaN值



我有这样的数据帧:

c1  c2
0   a  12  
1   b  NaN
2   a  45
3   c  NaN
4   c  32
5   b  NaN

我有像这样的字典

di = {
'a': 10, 'b': 20, 'c':30
}

我想像这个一样更新我的数据帧

c1  c2
0   a  12  
1   b  20
2   a  45
3   c  30
4   c  32
5   b  20

有什么方法可以在不使用条件为
的长lambda函数的情况下实现这一点
以下是创建数据帧的代码

a = pd.DataFrame({
'c1': ['a', 'b', 'a', 'c', 'c', 'b'],
'c2': [12, np.NaN, 45, np.NaN, 32, np.NaN]
})
di = {
'a': 10, 'b': 20, 'c':30
}
di

您可以使用apply((方法来处理此问题。创建一个函数,然后将该函数应用于所需的功能。

`def deal_na(cols):
x=cols[0]
y=cols[1]
if pd.isnull(y):
return di[x]
else:
return y
a['c2'] = a[['c1','c2']].apply(deal_na,axis=1)`

在这里,我们将特征"c1"one_answers"c2"的值作为列表传递给cols变量中的函数。然后我们将每个值分配给2个变量x和y。我们检查y是否为空。如果为空,则替换为di[x],否则原样返回。

使用Series.mapSeries.fillna仅替换缺少的值:

a['c2'] = a['c2'].fillna(a['c1'].map(di))
print (a)
c1    c2
0  a  12.0
1  b  20.0
2  a  45.0
3  c  30.0
4  c  32.0
5  b  20.0

最后,如果c1的所有值都在字典的关键字中,则所有缺失值的值都将被替换,并且可以转换为整数:

a['c2'] = a['c2'].fillna(a['c1'].map(di)).astype(int)
print (a)
c1  c2
0  a  12
1  b  20
2  a  45
3  c  30
4  c  32
5  b  20

最新更新