Как переписать это выражение с помощью iloc

#python #pandas

Вопрос:

У меня есть выражение

 df_1['result'][df_1['result'].isnull() amp; df_1['id'].notnull() ] = df_1['M'][df_1['result'].isnull() amp; df_1['id'].notnull()].apply(lambda x: [0]*len(x))
 

Я получаю следующую ошибку
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

Я пытаюсь переписать его вот так

 df_1.iloc[:,'result'][df_1.iloc[:,result].isnull() amp; df_1.iloc[:,'id'].notnull()] = df_1.iloc[:,'M'][df_1.iloc[:,result].isnull() amp; df_1.iloc[:,'id'].notnull()].apply(lambda x: [0]*len(x))
 

Я получаю следующую ошибку

 only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices
 

Но,насколько я знаю, я могу называть столбцы по имени, а не по индексу

Ответ №1:

Вы должны использовать loc :

 df_1.loc[df_1['result'].isnull() amp; df_1['id'].notnull(), 'result'] = df_1.loc[df_1['result'].isnull() amp; df_1['id'].notnull(), 'M'].apply(lambda x: [0]*len(x))
 

Или, если это не сработает, добавьте df_1 = df_1.copy() перед строкой выше.