#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)
здесь вы передаете фрейм данных, просто используйте один столбец DF4. О, да, теперь я это вижу!! Спасибо всем!!