Я искал ответ вокруг, но не могу найти его.
Моя цель: Я пытаюсь заполнить некоторые пропущенные значения в DataFrame , используя контролируемое обучение, чтобы принять решение как его заполнить.
Мой код выглядит так: ПРИМЕЧАНИЕ. ЭТА ПЕРВАЯ ЧАСТЬ НЕ ВАЖНА, ЭТО ПРОСТО ДАЕТ КОНТЕКСТ
train_df = df[df['my_column'].notna()] #I need to train the model without using the missing data
train_x = train_df[['lat','long']] #Lat e Long are the inputs
train_y = train_df[['my_column']] #My_column is the output
clf = neighbors.KNeighborsClassifier(2)
clf.fit(train_x,train_y) #clf is the classifies, here we train it
df_x = df[['lat','long']] #I need this part to do the prediction
prediction = clf.predict(df_x) #clf.predict() returns an array
series_pred = pd.Series(prediction) #now the array is a series
print(series_pred.shape) #RETURNS (2381,)
print(series_pred.isna().sum()) #RETURN 0
Пока что, так хорошо. У меня есть мои 2381 предсказания (мне нужно только несколько из них) , и внутри нет значения NaN (почему в предсказаниях должно быть значение NaN? Я просто хотел быть уверен , поскольку я не понимаю свою ошибку)
Здесь я пытаюсь назначить прогнозы моему фрейму данных:
#test_1
df.loc[df['my_colum'].isna(), 'my_colum'] = series_pred #I assign the predictions using .loc()
#test_2
df['my_colum'] = df['my_colum'].fillna(series_pred) #Double check: I assign the predictions using .fillna()
print(df['my_colum'].shape) #RETURNS (2381,)
print(df['my_colum'].isna().sum()) #RETURN 6
Как видите, я t не сделал работа: пропущенные значения по-прежнему 6 . Я случайно попробовал немного другой подход:
#test_3
df[['my_colum']] = df[['my_colum']].fillna(series_pred) #Will it work?
print(df[['my_colum']].shape) #RETURNS (2381, 1)
print(df[['my_colum']].isna().sum()) #RETURNS 6
Не сработало. Я решил попробовать еще одну вещь: проверить результаты заполнения еще до того, как присвоит результаты исходному df:
In[42]:
print(df['my_colum'].fillna(series_pred).isna().sum()) #extreme test
Out[42]:
6
Итак ... где мой очень очень глупая ошибка? Большое спасибо
РЕДАКТИРОВАТЬ 1
Чтобы показать немного данных,
In[1]:
df.head()
Out[1]:
my_column lat long
id
9df Wil 51 5
4f3 Fabio 47 9
x32 Fabio 47 8
z6f Fabio 47 9
a6f Giovanni 47 7
Кроме того, я добавил информацию в начале вопрос