Préciser le suffixe dans la méthode join Pandas
-
Joindre deux DataFrames en utilisant la méthode
DataFrame.join()
-
Joindre des DataFrames avec un nom de colonne commun en utilisant la méthode
DataFrame.join()
Ce tutoriel explique comment nous pouvons joindre deux DataFrames dans des Pandas en utilisant la méthode DataFrame.join()
et spécifier le suffixe lors de la jonction.
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
student_df = pd.DataFrame(
{
"Name": ["Jennifer", "Travis", "Bob", "Emma", "Luna", "Anish"],
"Gender": ["Female", "Male", "Male", "Female", "Female", "Male"],
"Age": [17, 18, 17, 16, 18, 16],
}
)
grades_df = pd.DataFrame(
{
"Roll No": [501, 502, 503, 504, 505, 506],
"Grades": ["A", "B+", "A-", "A", "B", "A+"],
}
)
print("Student DataFrame:")
print(student_df, "\n")
print("Grades DataFrame:")
print(grades_df)
Production :
Student DataFrame:
Name Gender Age
0 Jennifer Female 17
1 Travis Male 18
2 Bob Male 17
3 Emma Female 16
4 Luna Female 18
5 Anish Male 16
Grades DataFrame:
Roll No Grades
0 501 A
1 502 B+
2 503 A-
3 504 A
4 505 B
5 506 A+
Nous allons expliquer la méthode DataFrame.join()
en démontrant la jointure des DataFrame students_df
et grades_df
.
Joindre deux DataFrames en utilisant la méthode DataFrame.join()
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
student_df = pd.DataFrame(
{
"Name": ["Jennifer", "Travis", "Bob", "Emma", "Luna", "Anish"],
"Gender": ["Female", "Male", "Male", "Female", "Female", "Male"],
"Age": [17, 18, 17, 16, 18, 16],
}
)
grades_df = pd.DataFrame(
{
"Roll No": [501, 502, 503, 504, 505, 506],
"Grades": ["A", "B+", "A-", "A", "B", "A+"],
}
)
joined_df = student_df.join(grades_df)
print("Student DataFrame:")
print(student_df, "\n")
print("Grades DataFrame:")
print(grades_df, "\n")
print("Joined DataFrame:")
print(joined_df, "\n")
Production :
Student DataFrame:
Name Gender Age
0 Jennifer Female 17
1 Travis Male 18
2 Bob Male 17
3 Emma Female 16
4 Luna Female 18
5 Anish Male 16
Grades DataFrame:
Roll No Grades
0 501 A
1 502 B+
2 503 A-
3 504 A
4 505 B
5 506 A+
Joined DataFrame:
Name Gender Age Roll No Grades
0 Jennifer Female 17 501 A
1 Travis Male 18 502 B+
2 Bob Male 17 503 A-
3 Emma Female 16 504 A
4 Luna Female 18 505 B
5 Anish Male 16 506 A+
Il relie le student_df
et le grades_df
, et crée le joined_df
. Par défaut, la méthode join()
utilise l’index des deux DataFrames pour les joindre. La méthode de jointure est Left Join
par défaut. Ici, toutes les lignes du DataFrame de gauche, c’est-à-dire student_df
, sont conservées dans le joined_df
, et une ligne avec un DataFrame de droite ayant la même valeur d’index que la ligne du DataFrame de gauche est jointe et placée dans la même ligne.
Joindre des DataFrames avec un nom de colonne commun en utilisant la méthode DataFrame.join()
Si nous avons une colonne avec le même nom dans les deux DataFrames que nous essayons de joindre en utilisant la méthode DataFrame.join()
, nous obtenons une erreur avec le message ValueError: columns overlap but no suffix specified
. Nous pouvons définir les valeurs des paramètres lsuffix
et rsuffix
dans la méthode DataFrame.join()
pour résoudre l’erreur.
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
student_df = pd.DataFrame(
{
"Roll No": [501, 502, 503, 504, 505, 506],
"Name": ["Jennifer", "Travis", "Bob", "Emma", "Luna", "Anish"],
"Gender": ["Female", "Male", "Male", "Female", "Female", "Male"],
"Age": [17, 18, 17, 16, 18, 16],
}
)
grades_df = pd.DataFrame(
{
"Roll No": [501, 502, 503, 504, 505, 506],
"Grades": ["A", "B+", "A-", "A", "B", "A+"],
}
)
joined_df = student_df.join(grades_df, lsuffix="_left", rsuffix="_right")
print("Student DataFrame:")
print(student_df, "\n")
print("Grades DataFrame:")
print(grades_df, "\n")
print("Joined DataFrame:")
print(joined_df, "\n")
Production :
Student DataFrame:
Roll No Name Gender Age
0 501 Jennifer Female 17
1 502 Travis Male 18
2 503 Bob Male 17
3 504 Emma Female 16
4 505 Luna Female 18
5 506 Anish Male 16
Grades DataFrame:
Roll No Grades
0 501 A
1 502 B+
2 503 A-
3 504 A
4 505 B
5 506 A+
Joined DataFrame:
Roll No_left Name Gender Age Roll No_right Grades
0 501 Jennifer Female 17 501 A
1 502 Travis Male 18 502 B+
2 503 Bob Male 17 503 A-
3 504 Emma Female 16 504 A
4 505 Luna Female 18 505 B
5 506 Anish Male 16 506 A+
Il joint grades_df
à la droite de student_df
. La méthode DataFrame.join()
ne fusionne pas les DataFrames individuelles, c’est-à-dire que même si la colonne Roll No
est commune aux deux DataFrames, elles seront placées comme des champs séparés après join()
. Pour distinguer le nom de la colonne avec un nom commun, nous fournissons un suffixe pour les deux colonnes dans les DataFrames gauche et droite en utilisant les paramètres lsuffix
et rsuffix
.
Alternativement, nous pouvons aussi utiliser la méthode DataFrame.merge()
pour résoudre le problème en passant le nom commun de la colonne comme paramètre on
dans la méthode.
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
student_df = pd.DataFrame(
{
"Roll No": [501, 502, 503, 504, 505, 506],
"Name": ["Jennifer", "Travis", "Bob", "Emma", "Luna", "Anish"],
"Gender": ["Female", "Male", "Male", "Female", "Female", "Male"],
"Age": [17, 18, 17, 16, 18, 16],
}
)
grades_df = pd.DataFrame(
{
"Roll No": [501, 502, 503, 504, 505, 506],
"Grades": ["A", "B+", "A-", "A", "B", "A+"],
}
)
merged_df = student_df.merge(grades_df, on="Roll No")
print("Student DataFrame:")
print(student_df, "\n")
print("Grades DataFrame:")
print(grades_df, "\n")
print("Merged DataFrame:")
print(merged_df, "\n")
Production :
Student DataFrame:
Roll No Name Gender Age
0 501 Jennifer Female 17
1 502 Travis Male 18
2 503 Bob Male 17
3 504 Emma Female 16
4 505 Luna Female 18
5 506 Anish Male 16
Grades DataFrame:
Roll No Grades
0 501 A
1 502 B+
2 503 A-
3 504 A
4 505 B
5 506 A+
Merged DataFrame:
Roll No Name Gender Age Grades
0 501 Jennifer Female 17 A
1 502 Travis Male 18 B+
2 503 Bob Male 17 A-
3 504 Emma Female 16 A
4 505 Luna Female 18 B
5 506 Anish Male 16 A+
Il fusionne les DataFrames student_df
et grades_df
en un seul DataFrame. Dans ce cas, la colonne Roll No
sera fusionnée en une seule colonne pour les deux DataFrames.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn