perché dovrei fare una copia di un frame di dati in panda

Quando ho selezionato un sottoprogramma di dati da un dataframe principale, ho notato che alcuni programmatori eseguono una copia del frame di dati usando il metodo .copy() .

Perché stanno facendo una copia del frame dei dati? Cosa succederà se non faccio una copia?

Questo espande la risposta di Paolo. In Panda, l’indicizzazione di un DataFrame restituisce un riferimento al DataFrame iniziale. Pertanto, la modifica del sottoinsieme cambierà il DataFrame iniziale. Quindi, vorresti usare la copia se vuoi assicurarti che il DataFrame iniziale non debba cambiare. Considera il seguente codice:

 df = DataFrame({'x': [1,2]}) df_sub = df[0:1] df_sub.x = -1 print(df) 

Otterrai:

 x 0 -1 1 2 

Al contrario, le seguenti foglie df invariate:

 df_sub_copy = df[0:1].copy() df_sub_copy.x = -1 

Perché se non si esegue una copia, gli indici possono essere manipolati altrove anche se si assegna il dataFrame a un nome diverso.

Per esempio:

 df2 = df func1(df2) func2(df) 

func1 può modificare df modificando df2, così da evitare che:

 df2 = df.copy() func1(df2) func2(df) 

È necessario ricordare che la restituzione della copia o della visualizzazione dipende dal tipo di indicizzazione.

La documentazione di pandas dice:

Restituzione di una vista rispetto a una copia

Le regole su quando viene restituita una vista sui dati dipendono interamente da NumPy. Ogni volta che un array di etichette o un vettore booleano sono coinvolti nell’operazione di indicizzazione, il risultato sarà una copia. Con una singola etichetta / indicizzazione scalare e slicing, ad esempio df.ix [3: 6] o df.ix [:, ‘A’], verrà restituita una vista.

In generale è più sicuro lavorare sulle copie che sui frame di dati originali, tranne quando si sa che non si avrà più bisogno dell’originale e si desidera procedere con la versione manipolata. Normalmente, si dovrebbe ancora usare il frame dati originale per confrontarlo con la versione manipolata, ecc. Pertanto, molte persone lavorano su copie e si uniscono alla fine.