我想用人們的年齡替換列中的缺失值(其中還包含數值,不僅是 NaN 值),但到目前為止我嘗試過的所有東西要么不能按我想要的方式作業,要么不能正常作業全部。
我希望應用一個隨機變數生成器,它使用該列獲得的平均值和標準偏差遵循正態分布。
我嘗試了以下方法:
用 numpy 替換,替換 NaN 值,但所有值都相同
df_travel['Age'] = df_travel['Age'].replace(np.nan, round(rd.normalvariate(age_mean, age_std),0))
使用 pandas 的 Fillna,也替換 NaN 值,但所有值都相同
df_travel['Age'] = df_travel['Age'].fillna(round(rd.normalvariate(age_mean, age_std),0))
使用 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))
任何想法,將不勝感激。提前致謝。
uj5u.com熱心網友回復:
Series.fillna
可以接受一個系列,所以生成一個隨機陣列大小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)
uj5u.com熱心網友回復:
我會按照以下方式進行:
# compute mean and std of `Age`
age_mean = df['Age'].mean()
age_std = df['Age'].std()
# number of NaN in `Age` column
num_na = df['Age'].isna().sum()
# generate `num_na` samples from N(age_mean, age_std**2) distribution
rand_vals = age_mean age_std * np.random.randn(num_na)
# replace missing values with `rand_vals`
df.loc[df['Age'].isna(), 'Age'] = rand_vals
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455034.html