我在pandas数据框列中的分布均匀,我想替换一些NaN值。
由于数据是均匀分布的,所以我决定用从列的最小值和最大值范围抽取的随机均匀样本填充空值。我使用以下代码获取了随机统一样本:
df_copy['ep'] = df_copy['ep'].fillna(value=np.random.uniform(3, 331))
当然,使用pd.DafaFrame.fillna()
会将所有现有的NaN替换为相同的值。我希望每个NaN都具有不同的值。我认为for
循环可以完成工作,但是不确定如何创建这样的循环来专门处理这些NaN值。感谢您的帮助!
答案 0 :(得分:2)
如果您似乎是在一个系列(列)上执行此操作,但相同的实现将在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))
答案 1 :(得分:2)
将boolean indexing
与DataFrame.loc
一起使用:
m = df_copy['ep'].isna()
df_copy.loc[m, 'ep'] = np.random.uniform(3, 331, size=m.sum())