Suffix in Pandas Join-Methode angeben
-
Zwei DataFrames mit der Methode
DataFrame.join()
verbinden -
DataFrames mit einem gemeinsamen Spaltennamen mit der Methode
DataFrame.join()
verbinden
Dieses Tutorial erklärt, wie man in Pandas mit der Methode DataFrame.join()
zwei DataFrames zusammenfügen kann und dabei das Suffix angeben kann.
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)
Ausgabe:
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+
Wir erklären die Methode DataFrame.join()
, indem wir das Join von students_df
und grades_df
DataFrame demonstrieren.
Zwei DataFrames mit der Methode DataFrame.join()
verbinden
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")
Ausgabe
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+
Es werden student_df
und grades_df
verbunden und joined_df
erzeugt. Standardmäßig verwendet die Methode join()
den Index der beiden DataFrames, um sie zu verbinden. Die Join-Methode ist standardmäßig Left Join
. Hier werden alle Zeilen des linken DataFrames, d. h. student_df
, im joined_df
gehalten, und eine Zeile im rechten DataFrame, die denselben Indexwert wie die Zeile im linken DataFrame hat, wird verbunden und in dieselbe Zeile gesetzt.
DataFrames mit einem gemeinsamen Spaltennamen mit der Methode DataFrame.join()
verbinden
Wenn wir eine Spalte mit demselben Namen in beiden DataFrames haben, die wir mit der Methode DataFrame.join()
verbinden wollen, erhalten wir einen Fehler mit der Meldung ValueError: columns overlap but no suffix specified
. Wir können die Werte der Parameter lsuffix
und rsuffix
in der Methode DataFrame.join()
setzen, um den Fehler zu beheben.
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")
Ausgabe:
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+
Es wird grades_df
rechts von student_df
angefügt. Die Methode DataFrame.join()
führt die einzelnen DataFrames nicht zusammen, d. h. selbst wenn die Spalte Roll No
beiden DataFrames gemeinsam ist, werden sie nach join()
als separate Felder angezeigt. Um den Spaltennamen mit einem gemeinsamen Namen zu unterscheiden, geben wir Suffixe für beide Spalten im linken und rechten DataFrame mit den Parametern lsuffix
und rsuffix
an.
Alternativ können wir auch die Methode DataFrame.merge()
verwenden, um das Problem zu lösen, indem wir den Namen der gemeinsamen Spalte als Parameter on
in die Methode übergeben.
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")
Ausgabe:
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+
Es werden die DataFrames student_df
und grades_df
zu einem einzigen DataFrame zusammengeführt. In diesem Fall wird die Spalte Roll No
in eine einzige Spalte für beide DataFrames zusammengeführt.
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn