在pandas.dataframe

时间:2015-12-14 19:44:20

标签: python pandas machine-learning

我有一个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
...

1 个答案:

答案 0 :(得分:2)

IIUC您可以将axis=1fillnaIn [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}}