用截断的标准随机数填充NaN,并使用数据框各列的预定义平均值,标准差,最小值和最大值

问题描述

我想问问是否有一种方法可以根据每列的平均值,标准差(std),最小值和最大值来用截断的正常随机数填充每一列中的NaN。

假设我们有一个数据框,其第一列具有以下平均值,std,min和max值

count    846.000000
mean      13.385747
std       13.059811
min       -7.171171
25%        2.944954
50%       11.021540
75%       24.119154
max       59.000000

我想用从上述平均值,std,min和max值生成的截断的正常随机数填充这些NaN单元。然后对于第二列,它具有一组不同的均值,std,min和max,我想用从其均值,std,min和max集合中生成的截短的正常随机数填充第二列中的NaN单元,以此类推。

对于我的问题,我大约有301列。我尝试了以下方式,但是遇到错误

def fillNaN_with_unifrand(df):
    a = df.values
    m = np.isnan(a) # mask of NaNs
    lower,upper = df.min(),df.max()
    mu,sigma = df.mean(),df.std()
    a[m] = stats.truncnorm.rvs((lower - mu) / sigma,(upper - mu) / sigma,loc=mu,scale=sigma,size=m.sum())
    return df

for i in range(len(dataset_pre_syn_large_std_df.columns)):
    dataset_df[dataset_df.columns[i]] = fillNaN_with_unifrand(dataset_pre_syn_large_std_df[dataset_pre_syn_large_std_df.columns[i]])

我遇到的错误

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-13-000fe9486bee> in <module>
     13 
     14 for i in range(len(dataset_pre_syn_large_std_df.columns)):
---> 15     dataset_df[dataset_df.columns[i]] = fillNaN_with_unifrand(dataset_pre_syn_large_std_df[dataset_pre_syn_large_std_df.columns[i]])
     16 
     17 dataset_df.to_csv("test_4.csv")

<ipython-input-13-000fe9486bee> in fillNaN_with_unifrand(df)
      4     lower,df.max()
      5     mu,df.std()
----> 6     a[m] = stats.truncnorm.rvs((lower - mu) / sigma,size=m.sum())

~/anaconda3/envs/python3/lib/python3.6/site-packages/scipy/stats/_distn_infrastructure.py in rvs(self,*args,**kwds)
    964         cond = logical_and(self._argcheck(*args),(scale >= 0))
    965         if not np.all(cond):
--> 966             raise ValueError("Domain error in arguments.")
    967 
    968         if np.all(scale == 0):

ValueError: Domain error in arguments.

还有其他方法可以实现我想要的吗?还是可以调试错误

请告知。

非常感谢您。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...