python - 单独替换pandas.dataframe中的NaN

标签 python pandas machine-learning

我有一个 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 您可以将 applyaxis=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/

相关文章:

python - 更改列表中列的大小写

python - Pandas: reshape 数据框以将多列压缩为单行值

python - 数据帧中的.map(str) 和.astype(str) 有什么区别

machine-learning - 已经提出了哪些算法来学习深度神经网络的架构?

python - 找到多边形的左上角、右上角、右下角和左下角点

python - 正则表达式摆脱捕获组

image-processing - 方差分析可以用来比较两个图像吗?

r - "valid deviance"对于 GBM 模型来说是 nan,这意味着什么以及如何摆脱它?

python - 没有名为 'virtualenvwrapper' 的模块

python - Python 中的 H2OFrame() 正在向 Pandas DataFrame 添加额外的重复行 - Bug?