Comment (et pourquoi) faire une copie de Pandas DataFrame
Chaque fois que vous créez un sous-ensemble d’un DataFrame pandas, puis modifiez le sous-ensemble, le DataFrame d’origine sera également modifié.
Pour cette raison, c’est toujours une bonne idée d’utiliser .copy() lors du sous-ensemble afin que les modifications que vous apportez au sous-ensemble ne soient pas également apportées au DataFrame d’origine.
Les exemples suivants montrent comment (et pourquoi) faire une copie d’un DataFrame pandas lors d’un sous-ensemble.
Exemple 1 : sous-ensemble d’un DataFrame sans copie
Supposons que nous ayons le DataFrame pandas suivant :
import pandas as pd #create DataFrame 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 A 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 H 28 4
Supposons maintenant que nous créions un sous-ensemble contenant uniquement les quatre premières lignes du DataFrame d’origine :
#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
Si nous modifions l’une des valeurs du sous-ensemble, la valeur du DataFrame d’origine sera également modifiée :
#change first value in team column
df_subset.team[0] = 'X'
#view subsetted DataFrame
print(df_subset)
team points assists
0 X 18 5
1 B 22 7
2 C 19 7
3 D 14 9
#view original DataFrame
print(df)
team points assists
0 X 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 H 28 4
Notez que la première valeur de la colonne d’équipe a été modifiée de « A » à « X » à la fois dans le DataFrame sous-ensemble et dans le DataFrame d’origine.
C’est parce que nous n’avons pas fait de copie du DataFrame original.
Exemple 2 : sous-ensemble d’un DataFrame avec copie
Supposons encore une fois que nous ayons le DataFrame pandas suivant :
import pandas as pd #create DataFrame 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 A 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 H 28 4
Supposons encore une fois que nous créons un sous-ensemble qui contient uniquement les quatre premières lignes du DataFrame d’origine, mais cette fois nous utilisons .copy() pour faire une copie du DataFrame d’origine :
#define subsetted DataFrame df_subset = df[0:4].copy()
Supposons maintenant que nous modifions la première valeur de la colonne équipe du DataFrame sous-ensemble :
#change first value in team column
df_subset.team[0] = 'X'
#view subsetted DataFrame
print(df_subset)
team points assists
0 X 18 5
1 B 22 7
2 C 19 7
3 D 14 9
#view original DataFrame
print(df)
team points assists
0 A 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 H 28 4
Notez que la première valeur de la colonne d’équipe a été modifiée de « A » à « X » uniquement dans le sous-ensemble DataFrame.
Le DataFrame d’origine reste intact puisque nous avons utilisé .copy() pour en faire une copie lors de la création du sous-ensemble.
Ressources additionnelles
Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans les pandas :
Comment supprimer des lignes dans Pandas DataFrame en fonction de la condition
Comment filtrer un DataFrame Pandas sur plusieurs conditions
Comment utiliser le filtre « NON IN » dans Pandas DataFrame