Попытка предсказать пропущенные значения

#python #python-3.x #pandas

#python #python-3.x #панды

Вопрос:

Я пытаюсь приписать пропущенные значения не нулями или средними значениями, а прогнозируемыми результатами ML. Я тестирую свою идею на стандартном наборе данных ‘Titanic’, в котором заполнено около 80% записей о возрасте, но около 20% отсутствуют. Как я могу заполнить пропущенные значения прогнозируемыми результатами простой модели линейной регрессии? Вот код, который я тестирую.

 import pandas as pd
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()

data = pd.read_csv('C:\Users\ryans\seaborn-data\titanic.csv')
print(data)
list(data)
data.dtypes


data_with_null = data[['survived','pclass','sibsp','parch','fare','age']]

data_without_null = data_with_null.dropna()
train_data_x = data_without_null.iloc[:,:5]
train_data_y = data_without_null.iloc[:,5]

linreg.fit(train_data_x,train_data_y)

test_data = data_with_null.iloc[:,:5]
age = pd.DataFrame(linreg.predict(test_data))

# check for nulls
data_with_null.apply(lambda x: sum(x.isnull()),axis=0)
  

Все работает до этого момента, но когда я пытаюсь «заполнить», я получаю ошибки.

 data_with_null.age.fillna(age,inplace=True)
  

Строка кода непосредственно выше показывает эту ошибку:

Ошибка типа: параметр «value» должен быть скалярным, dict или Series, но вы передали «DataFrame»

 data_with_null['age'].fillna(data_with_null[data_with_null['age'].isnull()].apply(axis=1),inplace=True)
  

Аналогично, строка кода выше показывает эту ошибку:

Ошибка типа: apply() missing 1 required positional argument: 'func'

Комментарии:

1. data_with_null['age'].fillna(data_with_null[data_with_null['age'].isnull()].apply(axis=1),inplace=True) Здесь в .apply() функции вам не хватает одного аргумента, требуется функция, подобная той, которую вы выполняете в data_with_null.apply(lambda x: sum(x.isnull()),axis=0)

2. Для первой ошибки попробуйте: age = list(linreg.predict(test_data)) вместо age = pd.DataFrame(linreg.predict(test_data))

3. data_with_null.age.fillna(age,inplace=True) здесь вы передаете фрейм данных, просто используйте один столбец DF

4. О, да, теперь я это вижу!! Спасибо всем!!