我使用SimpleImputer和most_frequent来计算数据集中的缺失值。问题是这两列没有被独立处理,因此我得到了第一列中最常见的值,用来替换第二列中的NaN,这显然会歪曲我的数据。
下面的代码
from sklearn.impute import SimpleImputer
imputer = SimpleImputer(missing_values=np.nan, strategy='most_frequent',)
imputer.fit(X[:, 2:4])
X[:, 2:4] = imputer.transform(X[:, 2:4])
print(X[:, 3])
[2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 1517.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 1517.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 1517.0 2.0 1517.0 2.0 2.0 2.0 2.0 2.0 1517.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2426.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0 2.0 2.0 1517.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0 2.0
2.0 2.0 2.0 2.0]发布于 2020-07-02 21:25:03
我已经尝试了许多不同的方法,使用字典理解和apply,但我似乎不能让它在一行代码中工作。因此,我只能考虑使用for循环来迭代要对其使用SimpleImputer的列并应用它:
X = pd.DataFrame({'A':[1,2,3,4,5,4,8],
'B':[2,2,2,2,2,2,np.nan],
'C':[6,5,np.nan,6,4,4,6],
'D':[1,2,3,np.nan,np.nan,3,4]})
cols = X.columns[2:]
imputer = SimpleImputer(missing_values=np.nan, strategy='most_frequent')
for i in cols:
X[i] = imputer.fit_transform(X[i].values.reshape(-1,1))它填充第三列和第四列,但不填充第二列(这就是为什么第二列中的NaN。您还可以看到,无论2是数据帧中最频繁的数字,列都会被各自列中最频繁的数字填充:
A B C D
0 1 2.0 6.0 1.0
1 2 2.0 5.0 2.0
2 3 2.0 6.0 3.0
3 4 2.0 6.0 3.0
4 5 2.0 4.0 3.0
5 4 2.0 4.0 3.0
6 8 NaN 6.0 4.0我将做进一步的调查,在不需要for循环的情况下尝试并应用此方法,并更新此答案。就目前而言,这似乎可以完成这项工作。
https://stackoverflow.com/questions/62683385
复制相似问题