Ich bin verwirrt über die Regeln, die Pandas verwendet, wenn er entscheidet, dass eine Auswahl aus einem Datenrahmen eine Kopie des ursprünglichen Datenrahmens oder eine Ansicht des Originals ist.
Wenn ich zum Beispiel habe
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
Ich verstehe, dass ein query
eine Kopie zurückgibt, 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 ändern df
. Aber ich bin verloren, wenn es um kompliziertere Fälle geht. Beispielsweise,
df[df.C <= df.B] = 7654321
Änderungen df
, aber
df[df.C <= df.B].ix[:,'B':'E']
nicht.
Gibt es eine einfache Regel, die Pandas verwendet und die ich nur vermisse? Was ist in diesen speziellen Fällen los? 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 versuche)?
Hinweis: Dies ist nicht dasselbe wie diese Frage . und ich habe die Dokumentation gelesen , bin aber nicht davon aufgeklärt. Ich habe auch die "verwandten" Fragen zu diesem Thema gelesen, aber mir fehlt immer noch die einfache Regel, die Pandas verwendet, und wie ich sie anwenden würde, um beispielsweise die Werte (oder eine Teilmenge von Werten) zu ändern. in einem Datenrahmen, der eine bestimmte Abfrage erfüllt.
.query
wird IMMER eine Kopie zurückgeben, weil sie funktioniert (und keine Ansicht), weil sie von n numexpr ausgewertet wird. Also werde ich das zu den 'Regeln' hinzufügen