我有一个 900 x 7 数据框,其中 3 个字段包含一些 NaN 值。
我没有简单地用某些特征平均值替换这些值,而是创建了一个函数,使用一种算法根据该行中的其他值来估计每个 NaN 的可能值。
如何使用自定义函数迭代每个 NaN 以更改其值?
我的函数采用行 ID、其他功能名称以及包含 NaN 的功能作为参数。
例如
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
...
最佳答案
IIUC 您可以将 apply
与 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
关于python - 单独替换pandas.dataframe中的NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34275316/