python - OrdinalEncoder 和保持 Nans
问题描述
我有一个使用以下命令创建的 2d numpy 数组:
array = dataset.to_numpy()
X = array[:, 1:]
我想使用 OrdinalEncoder,但是我想估算 X 中的一些 Nans。我无法运行 OrdinalEncoder,因为它不喜欢 Nans,而且在编码之前我无法运行 KNNImputer。
我知道我可以用“?”之类的东西替换 Nan,然后 OrdinalEncoder() 就可以了,但是我必须通过并替换“?”的数字。转身回南。这意味着循环遍历 OrdinalEncoder 内部以找出“?”是什么。被映射到每一列,然后对该列进行替换。
难道没有更好的方法来做到这一点吗?我试图让掩蔽工作,但无法弄清楚。我需要对 X 而不是数据集进行操作。
解决方案
评论太长了,但是如果您不介意进行一些复制,则可以简单地将NaN
s 暂时从数组中移出。
array = dataset.to_numpy()
X = array[:, 1:]
nan_free_mask = ~np.isnan(X)
nan_free_X = X[nan_free_mask]
nan_free_encoded = OrdinalEncoder.fit_transform(nan_free_X, ...)
X_encoded = X.copy()
X_encoded[nan_free_mask] = nan_free_encoded
X_encoded = KNNImputer(...).fit_transform(X_encoded)
nan
你用任何一个替换的想法也没有错?
。你只需要记住它发生在哪里。据我所知,OrdinalEncoder 不会对您的数据进行洗牌,但我可能是错的:
array = dataset.to_numpy()
X = array[:, 1:]
nan_mask = np.isnan(X)
X[nan_mask] = '?'
X_encoded = OrdinalEncoder.fit_transform(X, ...)
X_encoded[nan_mask] = np.nan # restore NaN
X_encoded = KNNImputer(...).fit_transform(X_encoded)
再说一次,您可能已经想到了这一点……如果是这样,请更新问题并指定您尝试过的内容。
推荐阅读
- spring-boot - 在 SpringBoot 中为具有多个条件的 MongoRepository 命名查询方法
- html - 如何使用边距使元素居中而不删除边距顶部和左侧的旧值?
- c# - C#:使用 IN 和 OUT 参数执行 Oracle 过程并返回 OUT 参数
- php - Joomla 3.9 - 当我发布了两次由我开发的自定义模块时主页消失了
- c# - 我想通过他们的标签导入我的相关产品
- angular - 如何获取 Angular Material 中下拉列表的相应值?
- facebook-graph-api - 如何使用 Facebook-Api 检查用户是否是 facebook 群组的成员?
- angularjs - 无法设置背景图像属性
- c++ - 无法为 CryptoPP::RSAFunction 链接未定义的 VTT 引用
- html - Flexbox 不尊重 overflow-x: hidden on body (Safari / iOS webkit)