我有一些脏的数据描述了人的年龄。间隔时间是-7000到2015.我已经通过
更改了值df_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x)<=1 else x )
df_members['bd'] = df_members.bd.apply(lambda x: -99999 if float(x)>=100 else x )
下图显示了数据。
我通过排除-99999
的值来绘制图形如何在不影响分布的情况下替换-99999的值,如第二张图片所示?年龄在15-50岁之间,平均值约为29,出生日期的中位数= 28.0。我计划在15-50之间生成随机数,但我担心会破坏原始分布。
答案 0 :(得分:0)
https://stats.stackexchange.com/questions/78063/replacing-outliers-with-mean
快速入门,说明为什么通常不会这样做。无论:
我们将根据我们的样本均值和标准偏差生成一组带有numpy.random.normal的新值,并使用这些新的&#34;随机正常值&#34;之一替换超出我们选择值的任何值。样品
df_members['bd'] = df_members.bd.apply(lambda x: np.rint((np.random.normal(bd_mean, bd_sd))) if x==-999999 else x )
并修改&#34; x == - 99999&#34;无论你需要什么逻辑来找到要替换的东西。
因此,bd_mean和bd_sd也可以内联计算:
df_members['bd'] = df_members.bd.apply(lambda x: np.rint((np.random.normal(df_members.bd.mean(),df_members.bd.std())) if x>9999999 else x))
如果您觉得它是非正态分布,有许多不同的样本类型!看看这里: https://docs.scipy.org/doc/numpy-1.13.0/reference/routines.random.html
感谢所有人的编辑!