【问题标题】:What's the best way to replace NaN values (in a Pandas DataFrame) with values from a separate Pandas Series?用单独的 Pandas 系列中的值替换 NaN 值(在 Pandas DataFrame 中)的最佳方法是什么?
【发布时间】:2019-08-07 18:16:01
【问题描述】:

我从一个 Pandas DataFrame 开始,它有一列包含许多 NaN 值。

我将这个 Pandas DataFrame 拆分为两个 DataFrame:non-NaN 和 NaN。

我估计了一个线性回归模型来尝试填充 NaN 值(作为其他列的函数)。

所以我现在有一个单独的 Pandas 系列,其中包含估计值。它的长度与 NaN DataFrame 的长度相同。

我现在想将这些估计值放回 NaN 数据帧中,这样我就可以最终将这两个数据帧 pd.concat() 放入一个数据帧中,然后我可以将其用于我的分析。

我无法找到将这些值放回 NaN DataFrame 中正确行的方法。每次我尝试时,只有一些 NaN 被填充(并且可能顺序错误)。这似乎与它们的索引方式有关。

df_nan["Column"] = y_predicted

这是我尝试过的方式,但它只填充了一些行,而且不正确。也许与索引有关?

【问题讨论】:

  • 我认为您正在尝试填充数据集中的缺失值以进行分析?如果是这种情况,您实际上不需要拆分数据框,而是使用 Imputer 来填充缺失值。 sklearn.preprocessing.Imputer
  • 到目前为止您尝试过的代码是什么?您给出的一行代码不足以让其他用户重现问题,请给出从头到尾的所有代码。
  • 这不是关于我编写的代码的问题,而是关于解决此类问题的正确方法。
  • 查看 pd.DataFrame.update 的文档。索引必须相同。

标签: python pandas scikit-learn


【解决方案1】:

我认为这样做的方法可能如下:保留原始数据框并在要估算的列上使用 apply。

df['imputed_column'] = df.apply(lambda x: x.Column if(pd.notnull(x.Column)) else y_predicted[x.name],axis=1)

如果下面的行有一个空值(x.name 是行的索引),它将获得估计值。否则,它将保持相同的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 2018-11-14
    • 1970-01-01
    • 2017-07-04
    • 2014-06-12
    相关资源
    最近更新 更多