使用跟随特定分布的随机生成的数字替换一些数据

时间:2017-10-25 15:08:01

标签: python pandas dataframe distribution

我有一些脏的数据描述了人的年龄。间隔时间是-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 )

下图显示了数据。

enter image description here

我通过排除-99999

的值来绘制图形

enter image description here

如何在不影响分布的情况下替换-99999的值,如第二张图片所示?年龄在15-50岁之间,平均值约为29,出生日期的中位数= 28.0。我计划在15-50之间生成随机数,但我担心会破坏原始分布。

1 个答案:

答案 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

感谢所有人的编辑!