我试图摆脱数据框中的 NaN 值。我不想用平均值填充 NaN 或进行 ffill,而是想根据列内值的分布来填充缺失值。换句话说,如果一列有 120 行,20 行是 NaN,80 包含 1.0,20 包含 0,0,我想用 1 填充 80% 的 NaN 值。请注意,该列包含浮点数。
我做了一个函数来做到这一点:
def fill_cr_hist(x):
if x is pd.np.nan:
r = random.random()
if r > 0.80:
return 0.0
else:
return 1.0
else:
return x
但是,当我调用该函数时,它不会更改 NaN 值。
df['Credit_History'] = df['Credit_History'].apply(fill_cr_hist)
我用 pd.np.nan 填充 NaN 值,但它没有改变任何东西。
df['Credit_History'].fillna(value=pd.np.nan, inplace=True)
df['Credit_History'] = df['Credit_History'].apply(fill_cr_hist)
我编写的另一个函数几乎相同并且工作正常。在这种情况下,该列包含字符串。
def fill_self_emp(x):
if x is pd.np.nan:
r = random.random()
if r > 0.892442:
return 'Yes'
else:
return 'No'
else:
return x