我有一个900 x 7的数据帧,其中3个字段包含一些NaN值。
我没有简单地用某些特征平均值替换这些值,而是创建了一个函数来使用算法根据该行中的其他值估计每个NaN的可能值。
如何使用我的自定义函数迭代每个NaN以更改它的值?
我的函数将行ID,其他功能名称和包含NaN的功能作为参数。
E.g。
custom_fillnan(id=0, ins=["val0", "val1", "val2"], out="valn")
示例数据框:
ID val0 val1 val2 ... valn
0 1 2 3 ... NaN
1 1 NaN 3 ... 4
2 0 0 NaN ... 1
...
答案 0 :(得分:2)
IIUC您可以将axis=1
与fillna
和In [80]: df
Out[80]:
ID val0 val1 val2 valn
0 0 1 2 3 NaN
1 1 1 NaN 3 4
2 2 0 0 NaN 1
In [83]: df.apply(lambda x: x.fillna(pd.np.mean(x.iloc[1:])), axis=1)
Out[83]:
ID val0 val1 val2 valn
0 0 1 2.000000 3.000000 2
1 1 1 2.666667 3.000000 4
2 2 0 0.000000 0.333333 1
一起使用自定义函数:
pd.np.mean
而不是x.iloc[1:]
你可以使用你的功能。我使用了val
,因为据我所知,您只想使用def func(x):
x.loc[x.isnull()] = x.index[x.isnull()]
return x
In [209]: df.apply(func, axis=1)
Out[209]:
ID val0 val1 val2 valn
0 0 1 2 3 valn
1 1 1 val1 3 4
2 2 0 0 val2 1
列的函数。
修改强>
如果要获取缺失值的列名,可以应用或使用该函数进行处理:
{{1}}