Jestem zdezorientowany regułami używanymi przez Pandas, gdy decyduję, że wybór z ramki danych jest kopią oryginalnej ramki danych lub widokiem oryginału.
Jeśli mam na przykład
df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))
Rozumiem, że query
zwraca kopię tak, że coś podobnego
foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40
nie będzie miało wpływu na oryginalnym dataframe, df
. Rozumiem również, że plasterki skalarne lub nazwane zwracają widok, więc przypisania do nich, takie jak
df.iloc[3] = 70
lub
df.ix[1,'B':'E'] = 222
zmieni się df
. Ale gubię się, jeśli chodzi o bardziej skomplikowane sprawy. Na przykład,
df[df.C <= df.B] = 7654321
zmiany df
, ale
df[df.C <= df.B].ix[:,'B':'E']
nie.
Czy jest jakaś prosta zasada, której używa Pandy, a której po prostu mi brakuje? Co się dzieje w tych konkretnych przypadkach; aw szczególności, jak zmienić wszystkie wartości (lub podzbiór wartości) w ramce danych, które spełniają określone zapytanie (jak próbuję to zrobić w ostatnim przykładzie powyżej)?
Uwaga: to nie to samo, co to pytanie ; i przeczytałem dokumentację , ale nie oświeciła mnie. Przeczytałem również „Powiązane” pytania na ten temat, ale nadal brakuje mi prostej reguły używanej przez Pandy i sposobu, w jaki zastosowałbym ją - na przykład - zmodyfikować wartości (lub podzbiór wartości) w ramce danych, która spełnia określone zapytanie.
.query
ZAWSZE zwróci kopię z powodu tego, co robi (a nie widok), ponieważ jest oceniana przez n numexpr. Więc dodam to do „zasad”