Welche Regeln verwenden Pandas, um eine Ansicht gegen eine Kopie zu generieren?
Ich bin verwirrt über die Regeln, nach denen Pandas entscheidet, dass eine Auswahl aus einem Datenrahmen eine Kopie des ursprünglichen Datenrahmens oder eine Ansicht des Originals ist.
Wenn ich zum Beispiel
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
Ich verstehe, dass aquery
Gibt eine Kopie zurück, so dass so etwas wie
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
hat keine Auswirkung auf den ursprünglichen Datenrahmen,df
. Ich verstehe auch, dass skalare oder benannte Slices eine Ansicht zurückgeben, so dass Zuweisungen zu diesen, wie z
df.iloc[3] = 70
oder
df.ix[1,'B':'E'] = 222
wird sich veränderndf
. Aber ich bin verloren, wenn es um kompliziertere Fälle geht. Zum Beispiel,
df[df.C <= df.B] = 7654321
Änderungendf
, aber
df[df.C <= df.B].ix[:,'B':'E']
nicht.
Gibt es eine einfache Regel, die Pandas verwendet und die ich einfach vermisse? Was passiert in diesen speziellen Fällen? und insbesondere, wie ändere ich alle Werte (oder eine Teilmenge von Werten) in einem Datenrahmen, die eine bestimmte Abfrage erfüllen (wie ich es im letzten Beispiel oben versucht habe)?
Hinweis: Dies ist nicht dasselbe wiediese Frage; und ich habe gelesendie Dokumentation, bin aber nicht davon erleuchtet. Ich habe auch die "verwandten" Fragen zu diesem Thema durchgelesen, aber ich vermisse immer noch die einfache Regel, die Pandas verwendet, und wie ich sie anwenden würde, um zum Beispiel die Werte (oder eine Teilmenge von Werten) zu ändern. in einem Datenrahmen, der eine bestimmte Abfrage erfüllt.