我正在尝试撰写有关处理不良数据的不同方法的文章。现在,我正在研究 Null/None/Nan。
我想将数组中的随机值转换为 Null,然后将其打印出来,或以其他方式对其进行操作。
我将数据创建为
iris = datasets.load_iris()
X = iris.data
并且可以制作一个随机的面具
mask = np.random.random(size=X.shape)
mask = np.array([[True if y< .9 else False for y in x] for x in mask])
但我不知道如何将该掩码应用于数据。我想做的是如果 mask 中的相应值是 True,则保留 X 中的值,否则将其转换为 None
我现在做的方式并不漂亮,我觉得存在更 pythonic 的方式
i= 0
while i < len(X):
j=0
while j < len(X[i]):
X[i][j] = X[i][j] if mask[i][j] else None
j=j+1
i=i+1
print(X)
请您参考如下方法:
mask = np.random.choice([False, True], size=X.shape, p=[0.9, 0.1])
X[mask] = np.nan
如果你想看看它是如何工作的,这里有一个与你的数据集的最小 ipython session
In [1]: import numpy as np
In [2]: from sklearn import datasets
In [3]: iris = datasets.load_iris()
In [4]: X = iris.data[:6]
In [5]: X
Out[5]:
array([[5.1, 3.5, 1.4, 0.2],
[4.9, 3. , 1.4, 0.2],
[4.7, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, 3.9, 1.7, 0.4]])
In [6]: mask = np.random.choice([False, True], size=X.shape, p=[0.9, 0.1])
In [7]: mask.astype(int)
Out[7]:
array([[0, 0, 0, 0],
[1, 0, 0, 0],
[1, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 1, 0, 0]])
In [8]: X[mask] = np.nan
In [9]: X
Out[9]:
array([[5.1, 3.5, 1.4, 0.2],
[nan, 3. , 1.4, 0.2],
[nan, 3.2, 1.3, 0.2],
[4.6, 3.1, 1.5, 0.2],
[5. , 3.6, 1.4, 0.2],
[5.4, nan, 1.7, 0.4]])
