我在pandas dataframe列中有一个统一的分布,我想要替换几个NaN值。
由于数据是均匀分布的,我决定用从列的最小值和最大值范围中抽取的随机均匀样本填充空值。我使用以下代码来获取随机统一样本:
df_copy['ep'] = df_copy['ep'].fillna(value=np.random.uniform(3, 331))
当然,使用pd.DafaFrame.fillna()
会将所有现有的NaN替换为相同的值。我希望每个NaN都是不同的值。我假设for
循环可以完成工作,但我不确定如何创建这样的循环来专门处理这些NaN值。谢谢您的帮助!
如果您在系列(列)上执行此操作,但相同的实现将适用于DataFrame:
样本数据:
series = pd.Series(range(100))
series.loc[2] = np.nan
series.loc[10:15] = np.nan
解:
series.mask(series.isnull(), np.random.uniform(3, 331, size=series.shape))
使用boolean indexing
和DataFrame.loc
:
m = df_copy['ep'].isna()
df_copy.loc[m, 'ep'] = np.random.uniform(3, 331, size=m.sum())