Циклический просмотр и замена нулевых значений прогнозными значениями из модели - PullRequest
0 голосов
/ 08 мая 2019

Я заполняю некоторые пропущенные значения (NaN), используя прогнозируемое значение, построенное с KNN Regressor Model.Теперь я хотел бы ввести прогнозируемые значения в виде нового столбца в исходном фрейме данных, сохранив исходные значения для тех строк, которые не были NaN.Это будет новый столбец в моем фрейме данных, который я буду использовать для создания функции.

Я использую итерроу для циклического перебора значений для создания нового столбца, но получаю ошибку,Я использовал 2 разных способа изолировать значения NaN.Однако у меня возникают проблемы с каждым методом

sticker_price_preds = []
features = ['region_x', 'barrons', 'type_x', 'tier_x', 'iclevel_x', 
'exp_instr_pc_2013']

for index, row in data.iterrows():
    val = row['sticker_price_2013']
    if data[data['sticker_price_2013'].isnull()]:
        f = row['region_x', 'barrons', 'type_x', 'tier_x', 'iclevel_x', 
'exp_instr_pc_2013']
        val = knn.predict(f)
    sticker_price_preds.append(val)

data['sticker_price_preds'] = sticker_price_preds

AND

sticker_price_preds = []
features = ['region_x', 'barrons', 'type_x', 'tier_x', 'iclevel_x', 
'exp_instr_pc_2013']

for index, row in data.iterrows():
    val = row['sticker_price_2013']
    if not val:
        f = row['region_x', 'barrons', 'type_x', 'tier_x', 'iclevel_x', 
'exp_instr_pc_2013']
        val = knn.predict(f)
    sticker_price_preds.append(val)

data['sticker_price_preds'] = sticker_price_preds

Я возвращаю следующее сообщение об ошибке для первого метода:

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Для второго метода строки NaN остаются пустыми

1 Ответ

0 голосов
/ 08 мая 2019

Немного сложно без данных, чтобы попробовать, но если вы хотите векторное решение, это может сработать.Создайте столбец со значениями knn.predict, а затем отфильтруйте кадр данных по np.NaN

df['predict'] = knn.predict(features)

-

data.loc[data['sticker_price_2013'].isna(),'sticker_price_2013'] = data.loc[data['sticker_price_2013'].isna(), 'predict']
...