python - 迭代 Imputer 为给定列的所有 NaN 提供相同的输出值
问题描述
我目前有一个大约 350 列的数据框。我想使用迭代估算器和ExtraTreesRegressor
. 我创建了一个较小的数据框,其中包含感兴趣的特征。我的数据框看起来像:
我想估算 NaNfirst_seen_days
但是我遇到的问题是所有 NaN 都使用相同的值进行估算。我希望每个 NaN 都被赋予不同的值。这是我的代码:
data_interpolation = df_sample[["first_seen_days","domain_relevant_info_id",
"reason_id", "score.1", "status_id"]]
imp = IterativeImputer(random_state = 0)
imp.fit(data_interpolation)
X = data_interpolation
data_interpolation["first_seen_days"] = imp.transform(X)
解决方案
我已经尝试复制您的问题。我可以使用ExtraTreesRegressor
. 基于此,您的问题可能是由于数据的固有属性。
import numpy as np
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.ensemble import ExtraTreesRegressor
np.random.seed(0)
X = np.random.rand(20, 5)
df = pd.DataFrame(X, columns = ["A", "B", "C", "D", "E"])
#randomly assign these indexes nan
for i in [3, 5, 7, 15]:
df.iloc[i]["A"] = np.nan
##imputation - part of code from the question
imp = IterativeImputer(estimator=ExtraTreesRegressor(), random_state = 0)
imp.fit(df)
X = df
df["A"] = imp.transform(X)
#imputed values
print(df.iloc[[3, 5, 7, 15]]["A"])
#output
3 0.706066
5 0.561352
7 0.776586
15 0.550094
推荐阅读
- sql - 使用表中的索引规范化数据
- nginx - 如何允许从 nginx 中的子域访问域?
- css - 无法覆盖 chromecast 图标的 jwplayer css 样式
- java - 将从文件生成的值列表转换为数组(Java)
- azure-pipelines-release-pipeline - 如何在 TFS2018 Update 2 中配置 Partial Artifact 下载?
- r - 跨多个列使用 grepl 和 ifelse 的更简单方法
- c++ - 阶级友谊和继承问题
- php - 如何在 PHP 中使用一行代码显示数组和对象?
- opengl - 如何解决 GLFW_KEY_UNKNOWN
- java - JavaFX ListView IndexOutOfBoundsException