Ihr df2
ist ein Stück eines anderen Datenrahmens. Sie müssen kopieren Sie es explizit mit df2 = df2.copy()
kurz vor Ihrem Versuch zu drop
Betrachten Sie die folgende Datenrahmen:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.arange(20).reshape(4, 5), list('abcd'), list('ABCDE'))
df1
Lassen Sie mich ein Stück df1
-df2
zuordnen
df2 = df1[['A', 'C']]
df2
ist jetzt ein Stück df1
und sollte diese nervtötenden SettingWithCopyWarning
's auslösen, wenn wir versuchen, Dinge in df2
zu ändern. Lass uns einen Blick darauf werfen.
df2.drop('c')
Keine Probleme. Wie wäre es:
df2.drop('c', inplace=True)
Es gibt es:
Das Problem ist, dass Pandas effizient zu sein versucht und verfolgt, dass df2
auf die gleichen Daten wie df1
zeigt. Es bewahrt diese Beziehung. Die Warnung sagt Ihnen, dass Sie nicht versuchen sollten, sich mit dem ursprünglichen Datenrahmen über den Slice zu befassen.
Beachten Sie, dass die Zeile "c" gelöscht wurde, wenn wir df2
betrachten.
df2
und Blick auf df1
sehen wir, dass Zeile 'c' ist immer noch da.
df1
pandas gemacht Kopie df2
dann row 'c' fallen gelassen. Dies ist möglicherweise nicht konsistent mit dem, was unsere Absicht in Betracht gezogen haben könnte. Wir haben df2
ein Stück davon gemacht und zeigen auf dieselben Daten wie df1
. Pandas warnen uns.
Um die Warnung nicht zu sehen, erstellen Sie die Kopie selbst.
df2 = df2.copy()
# or
df2 = df1[['A', 'C']].copy()
Wie haben Sie 'df2' erstellt? Wenn Sie etwas wie "df2 = df1" eingegeben haben, kommt dieser Fehler von der Tatsache, dass "df2" eine Scheibe von 'df1' ist und nicht ein ganzes Objekt. Versuchen Sie 'df2 = df1.copy()' – ysearka
@ysearka 'df2 = df [df.id == 30013]' – ldevyataykina