Pandas join 방법에서 접미사 지정

Suraj Joshi 2023년1월30일
  1. DataFrame.join()메서드를 사용하여 두 개의 DataFrame 결합
  2. DataFrame.join()메서드를 사용하여 공통 열 이름으로 데이터 프레임 결합
Pandas join 방법에서 접미사 지정

이 튜토리얼에서는DataFrame.join()메소드를 사용하여 Pandas에서 두 개의 DataFrame을 결합하고 결합 할 때 접미사를 지정하는 방법을 설명합니다.

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)

출력:

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+

students_dfgrades_df DataFrame의 결합을 시연하여DataFrame.join()메서드를 설명합니다.

DataFrame.join()메서드를 사용하여 두 개의 DataFrame 결합

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")

출력:

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+ 

student_dfgrades_df를 결합하고joined_df를 생성합니다. 기본적으로join()메소드는 두 DataFrame의 색인을 사용하여 결합합니다. 조인 방법은 기본적으로 Left Join입니다. 여기서, 왼쪽 DataFrame의 모든 행, 즉 student_dfjoined_df에 보관되고, 왼쪽 DataFrame의 행과 동일한 인덱스 값을 갖는 오른쪽 DataFrame이있는 행은 결합되어 동일한 행에 배치됩니다.

DataFrame.join()메서드를 사용하여 공통 열 이름으로 데이터 프레임 결합

DataFrame.join()메서드를 사용하여 조인하려는 두 DataFrame에 동일한 이름의 열이있는 경우ValueError: columns overlap but no suffix specified 메시지와 함께 오류가 발생합니다. DataFrame.join()메소드에서lsuffixrsuffix 매개 변수의 값을 설정하여 오류를 해결할 수 있습니다.

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")

출력:

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+ 

student_df의 오른쪽에있는 grades_df에 합류합니다. DataFrame.join()은 개별 DataFrames를 병합하지 않습니다. 즉Roll No 열이 두 DataFrames 모두에 공통 인 경우에도join()뒤에 별도의 필드로 배치됩니다. 공통 이름으로 열 이름을 구별하기 위해lsuffixrsuffix 매개 변수를 사용하여 왼쪽 및 오른쪽 DataFrame의 두 열에 접미사를 제공합니다.

또는DataFrame.merge()메서드를 사용하여 공통 열의 이름을on 매개 변수로 메서드에 전달하여 문제를 해결할 수도 있습니다.

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")

출력:

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+ 

DataFrames student_dfgrades_df를 단일 DataFrame으로 병합합니다. 이 경우 Roll No열은 두 DataFrame 모두에 대해 단일 열로 병합됩니다.

작가: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn