[python] Quali regole usa Pandas per generare una vista o una copia?


Answers

Question

Sono confuso dalle regole che Pandas usa quando si decide che una selezione da un dataframe è una copia del dataframe originale o una vista sull'originale.

Se ho, per esempio,

df = pd.DataFrame(np.random.randn(8,8), columns=list('ABCDEFGH'), index=range(1,9))

Capisco che una query restituisce una copia in modo che qualcosa di simile

foo = df.query('2 < index <= 5')
foo.loc[:,'E'] = 40

non avrà alcun effetto sul dataframe originale, df . Capisco anche che le sezioni scalari o con nome restituiscono una vista, in modo che gli assegnamenti a questi, come ad esempio

df.iloc[3] = 70

o

df.ix[1,'B':'E'] = 222

cambierà df . Ma sono perso quando si tratta di casi più complicati. Per esempio,

df[df.C <= df.B]  = 7654321

cambia df , ma

df[df.C <= df.B].ix[:,'B':'E']

non.

C'è una semplice regola che sta usando Pandas che mi manca? Cosa sta succedendo in questi casi specifici? e in particolare, come faccio a cambiare tutti i valori (o un sottoinsieme di valori) in un dataframe che soddisfa una particolare query (come sto tentando di fare nell'ultimo esempio sopra)?

Nota: questa non è la stessa di questa domanda ; e ho letto la documentazione , ma non ne sono illuminata. Ho letto anche le domande "Correlate" su questo argomento, ma mi manca ancora la semplice regola che sta usando Pandas e come la applicherei, ad esempio, per modificare i valori (o un sottoinsieme di valori) in un dataframe che soddisfa una particolare query.




Related