Confusión re: copia de pandas de advertencia de segmento de datos

He revisado un montón de preguntas y respuestas relacionadas con este problema, pero todavía encuentro que recibo esta copia de la advertencia de corte en lugares donde no lo espero. Además, está surgiendo en el código que funcionaba bien para mí anteriormente, lo que me lleva a preguntarme si algún tipo de actualización puede ser el culpable.

Por ejemplo, este es un conjunto de código donde todo lo que estoy haciendo es leer en un archivo Excel en pandasDataFramey reduciendo el conjunto de columnas incluidas con eldf[[]] sintaxis.

 izmir = pd.read_excel(filepath)
 izmir_lim = izmir[['Gender','Age','MC_OLD_M>=60','MC_OLD_F>=60','MC_OLD_M>18','MC_OLD_F>18','MC_OLD_18>M>5','MC_OLD_18>F>5',
               'MC_OLD_M_Child<5','MC_OLD_F_Child<5','MC_OLD_M>0<=1','MC_OLD_F>0<=1','Date to Delivery','Date to insert','Date of Entery']]

Ahora, cualquier otro cambio que haga a estoizmir_lim archivo elevar la copia de advertencia de corte.

izmir_lim['Age'] = izmir_lim.Age.fillna(0)
izmir_lim['Age'] = izmir_lim.Age.astype(int)

/Users/samlilienfeld/anaconda/lib/python3.5/site-packages/ipykernel/principal.py: 2: SettingWithCopyWarning: se está intentando establecer un valor en una copia de un segmento de un DataFrame. Intente usar .loc [row_indexer, col_indexer] = value en su lugar

Estoy confundido porque pensé que eldf[[]] El subconjunto de columnas devolvió una copia por defecto. La única forma en que he encontrado para suprimir los errores es agregando explícitamentedf[[]].copy(). Podría haber jurado que en el pasado no tenía que hacer eso y no planteé la copia del error de corte.

Del mismo modo, tengo otro código que ejecuta una función en un marco de datos para filtrarlo de ciertas maneras:

def lim(df):
if (geography == "All"):
    df_geo = df
else:
    df_geo = df[df.center_JO == geography]

df_date = df_geo[(df_geo.date_survey >= start_date) & (df_geo.date_survey <= end_date)]

return df_date

df_lim = lim(df)

A partir de este momento, cualquier cambio que realice en cualquiera de los valores dedf_lim elevar la copia del error de corte. La única forma de evitarlo que he encontrado es cambiar la llamada de función a:

df_lim = lim(df).copy()

Esto me parece mal. ¿Qué me estoy perdiendo? Parece que estos casos de uso deberían devolver copias de forma predeterminada, y podría haber jurado que la última vez que ejecuté estos scripts no estaba ejecutando estos errores.
¿Solo necesito comenzar a agregar.copy() ¿por todo el lugar? Parece que debería haber una forma más limpia de hacer esto. Cualquier idea o ayuda es muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta