python - ''Se está intentando establecer un valor en una copia de un segmento de un DataFrame'' al usar ''iloc''
pandas (1)
Creo que necesitas una
copy
:
train = df.loc[df[''group''] != i].copy()
test = df.loc[df[''group''] == i].copy()
Si modifica los valores en la
test
más adelante, encontrará que las modificaciones no se propagan a los datos originales (
df
) y que Pandas hace una advertencia.
Jupiter nootbook está devolviendo esta advertencia:
*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
Consulte las advertencias en la documentación: 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
Consulte las advertencias en la documentación: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
self.obj[item] = s*
Después de ejecutar el siguiente código:
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'')
En el mensaje de error, se recomienda usar la indexación
.loc
cual hice, pero no ayudó.
Por favor, ayúdame, ¿cuál es el problema?
Revisé las preguntas relacionadas y leí la documentación, pero aún no la entiendo.