Да, точно. Ты прав.

ук Юпитера возвращает это предупреждение:

*C:\anaconda\lib\site-packages\pandas\core\indexing.py:337: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

Смотрите предостережения в документации:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

self.obj[key] = _infer_fill_value(value)
C:\anaconda\lib\site-packages\pandas\core\indexing.py:517: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

Смотрите предостережения в документации:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

self.obj[item] = s*

После запуска следующего кода:

def group_df(df,num):
    ln = len(df)
    rang = np.arange(ln)
    splt = np.array_split(rang,num)
    lst = []
    finel_lst = []
    for i,x in enumerate(splt):
        lst.append([i for x in range(len(x))])
    for k in lst:
        for j in k:
            finel_lst.append(j)
    df['group'] = finel_lst
    return df
def KNN(dafra,folds,K,fi,target):        
    df = group_df(dafra,folds)
    avarge_e = []
    for i in range(folds):
        train = df.loc[df['group'] != i]
        test = df.loc[df['group'] == i]
        test.loc[:,'pred_price'] = np.nan
        test.loc[:,'rmse'] = np.nan
        print(test.columns)
KNN(data,5,5,'GrLivArea','SalePrice')    

В сообщении об ошибке рекомендуется использовать.loc индексация - что я и сделал, но это не помогло. Пожалуйста, помогите мне - в чем проблема? Я прошел через связанные вопросы и прочитал документацию, но я все еще не понимаю.

 מורן רזניק13 окт. 2017 г., 13:13
отредактировано, чтобы включить все предупреждение
 Jan Zeiseweis13 окт. 2017 г., 13:02
Сказано ли в какой строке выдается предупреждение и какой была ваша предыдущая версия?
 Jan Zeiseweis13 окт. 2017 г., 13:20
Поскольку на вопрос уже дан ответ, просто мелочь. Вы можете заменить васgroup_df метод с этимdf['groups'] = pd.qcut(range(len(df)), folds, labels=False, retbins=True)[0] Это встроенная функция от панд, которая должна создавать мусорные ведра одинакового размера.pandas.pydata.org/pandas-docs/stable/generated/pandas.qcut.html

Ответы на вопрос(1)

Решение Вопроса

Я думаю тебе нужноcopy:

train = df.loc[df['group'] != i].copy()
test = df.loc[df['group'] == i].copy()

Если вы измените значения вtest позже вы обнаружите, что изменения не распространяются обратно на исходные данные (df), и это Панды делает предупреждение.

 מורן רזניק13 окт. 2017 г., 13:28
Итак, индексация loc создает «представление» исходного df, что означает, что любое изменение к ним будет также применено к исходному df? и я не хочу, чтобы это случилось, мне нужно использовать .copy ()?
 jezrael13 окт. 2017 г., 13:30
Да, точно. Ты прав.
 מורן רזניק13 окт. 2017 г., 13:16
Спасибо! это сработало. пожалуйста, объясните мне, в чем была проблема и как ваше предложение ее устранило? :)
 jezrael13 окт. 2017 г., 13:16
Да, дай мне секунду

Ваш ответ на вопрос