Come (e perché) creare una copia di pandas dataframe


Ogni volta che crei un sottoinsieme di un DataFrame panda e quindi modifichi il sottoinsieme, verrà modificato anche il DataFrame originale.

Per questo motivo, è sempre una buona idea utilizzare .copy() durante il sottoinsieme in modo che le modifiche apportate al sottoinsieme non vengano apportate anche al DataFrame originale.

Gli esempi seguenti mostrano come (e perché) creare una copia di un DataFrame panda durante il subsetting.

Esempio 1: sottoimpostazione di un DataFrame senza una copia

Supponiamo di avere i seguenti panda DataFrame:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4]})

#view DataFrame
print (df)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

Supponiamo ora di creare un sottoinsieme contenente solo le prime quattro righe del DataFrame originale:

 #define subsetted DataFrame
df_subset = df[0:4]

#view subsetted DataFrame
print (df_subset)

  team points assists rebounds
0 A 18 5 11
1 B 22 7 8
2 C 19 7 10
3 D 14 9 6

Se modifichiamo uno qualsiasi dei valori nel sottoinsieme, verrà modificato anche il valore del DataFrame originale:

 #change first value in team column
df_subset. team [0] = ' X '

#view subsetted DataFrame
print (df_subset)

  team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9

#view original DataFrame
print (df)

  team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

Tieni presente che il primo valore della colonna del team è stato modificato da “A” a “X” sia nel sottoinsieme DataFrame che nel DataFrame originale.

Questo perché non abbiamo creato una copia del DataFrame originale.

Esempio 2: sottoimpostazione di un DataFrame con Copy

Supponiamo ancora una volta di avere i seguenti DataFrame panda:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4]})

#view DataFrame
print (df)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

Supponiamo ancora di creare un sottoinsieme che contenga solo le prime quattro righe del DataFrame originale, ma questa volta utilizziamo .copy() per creare una copia del DataFrame originale:

 #define subsetted DataFrame
df_subset = df[0:4]. copy ()

Supponiamo ora di modificare il primo valore della colonna team del sottoinsieme DataFrame:

 #change first value in team column
df_subset. team [0] = ' X '

#view subsetted DataFrame
print (df_subset)

  team points assists
0X18 5
1 B 22 7
2 C 19 7
3 D 14 9

#view original DataFrame
print (df)

  team points assists
0 to 18 5
1 B 22 7
2 C 19 7
3 D 14 9
4 E 14 12
5 F 11 9
6 G 20 9
7:28 a.m. 4

Tieni presente che il primo valore della colonna del team è stato modificato da “A” a “X” solo nel sottoinsieme DataFrame.

Il DataFrame originale rimane intatto poiché abbiamo utilizzato .copy() per farne una copia durante la creazione del sottoinsieme.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre operazioni comuni nei panda:

Come eliminare le righe in Pandas DataFrame in base alle condizioni
Come filtrare un Pandas DataFrame su più condizioni
Come utilizzare il filtro “NOT IN” in Pandas DataFrame

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *