Confusion Re: Pandas Kopie der Scheibe von DataFrame-Warnung

Ich habe eine Reihe von Fragen und Antworten zu diesem Problem durchgesehen, stelle jedoch weiterhin fest, dass ich diese Kopie der Slice-Warnung an Orten erhalte, an denen ich dies nicht erwarte. Außerdem taucht es in Code auf, der zuvor für mich in Ordnung war, was mich zu der Frage veranlasste, ob eine Art Update der Schuldige sein könnte.

Zum Beispiel ist dies ein Satz von Code, in dem ich nur eine Excel-Datei in einen Pandas einlese.DataFrame und Reduzieren der Spalten, die im @ enthalten sidf[[]] Syntax

 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']]

Nun, alle weiteren Änderungen, die ich an diesem @ vornehizmir_lim file Löst die Kopie der Slice-Warnung aus.

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 /Mai .py: 2: SettingWithCopyWarning: Es wird versucht, einen Wert für eine Kopie eines Slice aus einem DataFrame festzulegen. Versuchen Sie es mit .loc [row_indexer, col_indexer] = value anstatt

Ich bin verwirrt, weil ich dachte, diedf[[]]ie Untergruppe der @ -Spalte hat standardmäßig eine Kopie zurückgegeben. Die einzige Möglichkeit, die Fehler zu unterdrücken, ist das explizite Hinzufügen vondf[[]].copy(). Ich hätte schwören können, dass ich das in der Vergangenheit nicht tun musste und die Kopie des Slice-Fehlers nicht ausgelöst habe.

Ähnlich habe ich einen anderen Code, der eine Funktion auf einem Datenrahmen ausführt, um ihn auf bestimmte Arten zu filtern:

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)

on diesem Punkt an werden alle Änderungen, die ich an einem der Werte von @ vornehmdf_lim Erhöhen Sie die Kopie des Slice-Fehlers. Der einzige Weg, den ich gefunden habe, ist, den Funktionsaufruf zu ändern:

df_lim = lim(df).copy()

Das scheint mir einfach falsch zu sein. Was vermisse ich? Anscheinend sollten diese Anwendungsfälle standardmäßig Kopien zurückgeben, und ich hätte schwören können, dass ich beim letzten Ausführen dieser Skripts diese Fehler nicht ausgeführt habe.
Muss ich nur mit dem Hinzufügen von @ beginne.copy() überall? Es scheint, als gäbe es einen saubereren Weg, dies zu tun. Jeder Einblick oder jede Hilfe wird sehr geschätzt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage