Python 截断正态分布
我创建了一系列均值和标准差的正态分布。每个分发需要返回到数据帧的一列Python 截断正态分布,python,pandas,numpy,normal-distribution,Python,Pandas,Numpy,Normal Distribution,我创建了一系列均值和标准差的正态分布。每个分发需要返回到数据帧的一列 dat mu sigma 0 0.0 0.1 1 0.1 0.1 2 0.2 0.1 3 0.3 0.1 ... 100 0.9 0.9 N = 10000 new = pd.DataFrame() for index, row in dat.iterrows(): q = np.random.normal(row['mu'], row['sigma'],N)
dat
mu sigma
0 0.0 0.1
1 0.1 0.1
2 0.2 0.1
3 0.3 0.1
...
100 0.9 0.9
N = 10000
new = pd.DataFrame()
for index, row in dat.iterrows():
q = np.random.normal(row['mu'], row['sigma'],N)
new[index] = q
我需要将每个分布截断为(0,1)的范围。实现这一目标的最佳方式是什么 使用clip()
方法:
new = new.clip(0,1)
如果你想换成nan
import numpy as np
ts.clip(0,1).replace([0,1],np.nan)
使用clip()
方法:
new = new.clip(0,1)
如果你想换成nan
import numpy as np
ts.clip(0,1).replace([0,1],np.nan)
对于性能,尤其是在处理数值数据时,我建议在数组级别工作。这里有一种方法遵循这一理念,并使用
掩蔽
来分配新值-
arr = new.values
arr[(arr < 0 ) | (arr > 1)] = np.nan
arr=new.values
arr[(arr<0)|(arr>1)]=np.nan
此外,当我们将值提取为数组时,我们正在那里创建一个视图。因此,所有分配的值都直接分配给原始数据帧
让我们来看一个示例运行,以使事情变得更清楚-
In [98]: new
Out[98]:
0 1 2 3
0 -0.043621 0.130358 0.080129 0.328385
1 0.254040 0.182079 0.196277 0.200776
2 -0.095340 0.079365 0.087692 0.248947
3 -0.121635 -0.034989 0.234536 0.247606
4 0.156337 0.164760 0.202639 0.326892
In [99]: arr = new.values
In [100]: arr[(arr < 0 ) | (arr > 1)] = np.nan
In [101]: new
Out[101]:
0 1 2 3
0 NaN 0.130358 0.080129 0.328385
1 0.254040 0.182079 0.196277 0.200776
2 NaN 0.079365 0.087692 0.248947
3 NaN NaN 0.234536 0.247606
4 0.156337 0.164760 0.202639 0.326892
[98]中的:新建
出[98]:
0 1 2 3
0 -0.043621 0.130358 0.080129 0.328385
1 0.254040 0.182079 0.196277 0.200776
2 -0.095340 0.079365 0.087692 0.248947
3 -0.121635 -0.034989 0.234536 0.247606
4 0.156337 0.164760 0.202639 0.326892
在[99]中:arr=new.values
在[100]中:arr[(arr<0)|(arr>1)]=np.nan
在[101]中:新的
出[101]:
0 1 2 3
0.130358 0.0801290.328385
1 0.254040 0.182079 0.196277 0.200776
2 NaN 0.079365 0.087692 0.248947
3楠楠0.234536 0.247606
4 0.156337 0.164760 0.202639 0.326892
对于性能,尤其是在处理数字数据时,我建议在数组级别工作。这里有一种方法遵循这一理念,并使用掩蔽
来分配新值-
arr = new.values
arr[(arr < 0 ) | (arr > 1)] = np.nan
arr=new.values
arr[(arr<0)|(arr>1)]=np.nan
此外,当我们将值提取为数组时,我们正在那里创建一个视图。因此,所有分配的值都直接分配给原始数据帧
让我们来看一个示例运行,以使事情变得更清楚-
In [98]: new
Out[98]:
0 1 2 3
0 -0.043621 0.130358 0.080129 0.328385
1 0.254040 0.182079 0.196277 0.200776
2 -0.095340 0.079365 0.087692 0.248947
3 -0.121635 -0.034989 0.234536 0.247606
4 0.156337 0.164760 0.202639 0.326892
In [99]: arr = new.values
In [100]: arr[(arr < 0 ) | (arr > 1)] = np.nan
In [101]: new
Out[101]:
0 1 2 3
0 NaN 0.130358 0.080129 0.328385
1 0.254040 0.182079 0.196277 0.200776
2 NaN 0.079365 0.087692 0.248947
3 NaN NaN 0.234536 0.247606
4 0.156337 0.164760 0.202639 0.326892
[98]中的:新建
出[98]:
0 1 2 3
0 -0.043621 0.130358 0.080129 0.328385
1 0.254040 0.182079 0.196277 0.200776
2 -0.095340 0.079365 0.087692 0.248947
3 -0.121635 -0.034989 0.234536 0.247606
4 0.156337 0.164760 0.202639 0.326892
在[99]中:arr=new.values
在[100]中:arr[(arr<0)|(arr>1)]=np.nan
在[101]中:新的
出[101]:
0 1 2 3
0.130358 0.0801290.328385
1 0.254040 0.182079 0.196277 0.200776
2 NaN 0.079365 0.087692 0.248947
3楠楠0.234536 0.247606
4 0.156337 0.164760 0.202639 0.326892
我需要异常值为NaN,是否有同样简单的方法?我需要异常值为NaN,是否有同样简单的方法?发布的解决方案是否对您有效?发布的解决方案是否对您有效?