首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用两列计算平均值的SimpleImputer

使用两列计算平均值的SimpleImputer
EN

Stack Overflow用户
提问于 2020-07-02 02:39:58
回答 1查看 56关注 0票数 1

我使用SimpleImputer和most_frequent来计算数据集中的缺失值。问题是这两列没有被独立处理,因此我得到了第一列中最常见的值,用来替换第二列中的NaN,这显然会歪曲我的数据。

下面的代码

代码语言:javascript
复制
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]
EN

回答 1

Stack Overflow用户

发布于 2020-07-02 21:25:03

我已经尝试了许多不同的方法,使用字典理解和apply,但我似乎不能让它在一行代码中工作。因此,我只能考虑使用for循环来迭代要对其使用SimpleImputer的列并应用它:

代码语言:javascript
复制
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是数据帧中最频繁的数字,列都会被各自列中最频繁的数字填充:

代码语言:javascript
复制
   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循环的情况下尝试并应用此方法,并更新此答案。就目前而言,这似乎可以完成这项工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62683385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档