如何在 Python 上用不同的随机数填充 NaN 值?

AWD*_*n0n 4 python random nan dataframe pandas

我想用人们的年龄替换列中的缺失值(其中还包含数值,而不仅仅是 NaN 值),但到目前为止我尝试过的所有内容要么无法按照我想要的方式工作,要么无法在全部。

我希望应用一个随机变量生成器,它使用该列获得的平均值和标准差遵循正态分布。

我已经尝试过以下方法:

  • 替换为 numpy,替换 NaN 值,但所有值都使用相同的数字

    df_travel['Age'] = df_travel['Age'].replace(np.nan, round(rd.normalvariate(age_mean, age_std),0))
    
    Run Code Online (Sandbox Code Playgroud)
  • 用 pandas 填充 NaN,也替换 NaN 值,但所有值都使用相同的数字

    df_travel['Age'] = df_travel['Age'].fillna(round(rd.normalvariate(age_mean, age_std),0))
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用 pandas 在数据帧上应用函数,替换 NaN 值,但也更改所有现有数值(我只想填充 NaN 值)

    df_travel['Age'] = df_travel['Age'].where(df_travel['Age'].isnull() == True).apply(lambda v: round(rd.normalvariate(age_mean, age_std),0))
    
    Run Code Online (Sandbox Code Playgroud)

任何想法,将不胜感激。提前致谢。

tdy*_*tdy 5

Series.fillna可以接受一个 Series,因此生成一个大小为 的随机数组len(df_travel)

rng = np.random.default_rng(0)
mu = df_travel['Age'].mean()
sd = df_travel['Age'].std()

filler = pd.Series(rng.normal(loc=mu, scale=sd, size=len(df_travel)))
df_travel['Age'] = df_travel['Age'].fillna(filler)
Run Code Online (Sandbox Code Playgroud)