擅长:python、mysql、java
<p>对于注释来说太长了,但是如果您不介意复制的话,您可以将<code>NaN</code>临时移出数组</p>
<pre class="lang-py prettyprint-override"><code>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)
</code></pre>
<p>你用<code>?</code>替换<code>nan</code>的想法也没有错。你只需要记住它发生在哪里。据我所知,OrdinalCoder不会对您的数据进行洗牌,但我可能错了:</p>
<pre class="lang-py prettyprint-override"><code>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)
</code></pre>
<p>再说一次,你可能已经想到了。。。如果是,请更新问题并指定您尝试过的内容</p>