#python #pandas #scikit-learn
Вопрос:
В настоящее время у меня есть фрейм данных с ~350 столбцами. Я хочу вменить NAN в один из этих столбцов, используя несколько других столбцов, используя итеративный вменитель и ExtraTreesRegressor
. Я создал меньший фрейм данных, содержащий интересующие функции. Мой фрейм данных выглядит так:
Я хочу вменить NANS, first_seen_days
однако проблема, с которой я сталкиваюсь, заключается в том, что все NANS вменяются с использованием одного и того же значения. Я ожидаю, что каждому нанометру будет вменено разное значение. Это мой код:
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)
Ответ №1:
Я попытался воспроизвести вашу проблему. Я могу вменять разные значения, используя 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