팬더 안티 가입

Mehvish Ashiq 2024년2월15일
  1. Pandas Anti-Join 및 그 유형
  2. Pandas에서 Left Anti-Join 수행
  3. Pandas에서 올바른 조인 방지 수행
팬더 안티 가입

이 튜토리얼은 Pandas의 안티 조인에 대해 설명하고 해당 유형을 간략하게 설명하며 예제 코드를 사용하여 각각을 보여줍니다.

Pandas Anti-Join 및 그 유형

조인 방지를 사용하면 다른 데이터세트에서 일치하는 값을 찾지 못하는 한 데이터세트의 모든 행(레코드 및 문서라고도 함)을 반환할 수 있습니다. 이들은 프로젝트 요구 사항에 따라 데이터 세트를 조작하는 데 사용됩니다.

pandas 안티 조인 - 안티 조인 시각화

Pandas에는 아래에 나열된 두 가지 유형의 조인 방지가 있습니다.

  • Left Anti-Join - 오른쪽 데이터 집합에 일치하는 레코드가 없는 왼쪽 데이터 집합의 레코드를 반환합니다.
  • Right Anti-Join - 왼쪽 데이터 집합의 레코드와 일치하지 않는 오른쪽 데이터 집합의 레코드를 반환합니다.

위의 표 표현을 참조하십시오. 우리는 교차점을 제외한 왼쪽 데이터 세트를 반환하는 왼쪽 안티 조인을 사용하고 있습니다.

오른쪽이 아닌 왼쪽 데이터 세트의 열만 반환합니다.

마찬가지로 올바른 안티 조인을 사용하면 교차를 제외하고 올바른 데이터 세트가 반환됩니다. 왼쪽 안티 조인과 마찬가지로 왼쪽 데이터 세트가 아닌 오른쪽 데이터 세트의 열도 반환합니다.

Pandas에서 이러한 안티 조인을 모두 사용하는 방법을 알아보겠습니다. Anti-Join을 확실히 파악하려면 SQL 조인에 대한 충분한 지식이 있어야 합니다.

Pandas에서 Left Anti-Join 수행

  • 라이브러리를 가져옵니다.
    import pandas as pd
    

    먼저 pandas 라이브러리를 가져와서 데이터 프레임으로 재생합니다.

  • 두 개의 데이터 프레임을 만듭니다.
    # first DataFrame
    df1 = pd.DataFrame(
        {"sections": ["A", "B", "C", "D", "E"], "points": [19, 23, 20, 15, 31]}
    )
    
    print("First DataFrame:")
    print(df1)
    
    # second DataFrame
    df2 = pd.DataFrame(
        {"sections": ["A", "B", "C", "F", "G"], "points": [19, 23, 20, 24, 30]}
    )
    
    print("\n\nSecond DataFrame:")
    print(df2)
    

    아래에서 볼 수 있는 다른 섹션에 대한 샘플 포인트를 포함하는 두 개의 데이터 프레임을 생성합니다.

    출력:

    First DataFrame:
    sections points
    0        A      19
    1        B      23
    2        C      20
    3        D      15
    4        E      31
    
    
    Second DataFrame:
    sections points
    0        A      19
    1        B      23
    2        C      20
    3        F      24
    4        G      30
    
  • 외부 조인을 수행합니다.
    outer_join = df1.merge(df2, how="outer", indicator=True)
    print(outer_join)
    

    조인 방지를 수행하려면 두 데이터 세트 중 하나 또는 모두에서 일치하는 값과 일치하지 않는 값을 반환하는 외부 조인을 거쳐야 합니다. 두 데이터 세트에서 일치하는 값과 일치하지 않는 값을 가져옵니다(다음 출력에서 확인할 수 있음).

    여기서 merge() 메서드는 두 데이터 프레임을 병합하는 특정 메서드를 사용하여 두 데이터 프레임의 데이터를 업데이트하는 데 사용됩니다. 대체할 값과 유지할 값을 제어하기 위해 몇 가지 매개변수를 사용하고 있습니다.

    • df2 - 병합할 또 다른 데이터 프레임입니다.
    • 방법 - 병합 방법을 지정합니다. 값이 left, right, outer, inner 또는 cross일 수 있는 선택적 매개변수입니다. 기본적으로 내부입니다.
    • indicator - True, False 또는 문자열 유형 값으로 설정할 수 있습니다. True로 설정하면 모든 행의 소스에 대한 정보가 있는 출력 데이터 프레임에 _merge 열을 추가합니다.

    문자열 인수를 지정하여 _merge 열에 다른 이름을 지정할 수도 있습니다. 이 열에는 다음 출력에서와 같이 범주형 유형 값(예: left_only, right_onlyboth)이 포함됩니다.

    여기서 both는 관찰(행)의 병합 키가 두 데이터세트 모두에서 발견되는 경우를 의미하고 left_only는 관찰의 병합 키가 왼쪽 데이터세트에서만 발견됨을 나타내고 right_only는 관찰의 병합을 나타냅니다. 키는 오른쪽 데이터 세트에서만 찾을 수 있습니다.

    출력:

    sections points      _merge
    0        A      19        both
    1        B      23        both
    2        C      20        both
    3        D      15   left_only
    4        E      31   left_only
    5        F      24 right_only
    6        G      30 right_only
    
  • 왼쪽 안티 조인을 수행합니다.
    lef_anti_join = outer_join[(outer_join._merge == "left_only")].drop("_merge", axis=1)
    print(lef_anti_join)
    

    먼저 outer_join[(outer_join._merge=='left_only')]를 사용하여 _merge 열에서 left_only 값이 있는 모든 행을 검색한 다음 .drop() 메서드로 연결합니다. 출력 데이터 프레임에서 _merge 열을 삭제합니다.

    출력:

    sections points
    3        D      15
    4        E      31
    

    이제 교차를 제외하고 왼쪽 데이터 프레임(df1)에서 열을 얻습니다.

  • Pandas에서 왼쪽 안티 조인을 수행하려면 전체 소스 코드를 참조하십시오.
    import pandas as pd
    
    # first DataFrame
    df1 = pd.DataFrame(
        {"sections": ["A", "B", "C", "D", "E"], "points": [19, 23, 20, 15, 31]}
    )
    print("First DataFrame:")
    print(df1)
    
    # second DataFrame
    df2 = pd.DataFrame(
        {"sections": ["A", "B", "C", "F", "G"], "points": [19, 23, 20, 24, 30]}
    )
    print("\n\nSecond DataFrame:")
    print(df2)
    
    # outer join
    outer_join = df1.merge(df2, how="outer", indicator=True)
    
    # left anti join
    lef_anti_join = outer_join[(outer_join._merge == "left_only")].drop("_merge", axis=1)
    print("\n\nLeft Anti-join:")
    print(lef_anti_join)
    

    출력:

    First DataFrame:
    sections points
    0        A      19
    1        B      23
    2        C      20
    3        D      15
    4        E      31
    
    
    Second DataFrame:
    sections points
    0        A      19
    1        B      23
    2        C      20
    3        F      24
    4        G      30
    
    
    Left Anti-join:
    sections points
    3        D      15
    4        E      31
    

Pandas에서 올바른 조인 방지 수행

Pandas에서 left anti-join을 수행하는 방법을 단계별로 배웠습니다. 올바른 안티 조인도 유사하게 수행할 수 있지만 여기서는 _merge 열에서 right_only 값이 있는 행을 선택합니다.

예제 코드:

import pandas as pd

# first DataFrame
df1 = pd.DataFrame(
    {"sections": ["A", "B", "C", "D", "E"], "points": [19, 23, 20, 15, 31]}
)
print("First DataFrame:")
print(df1)

# second DataFrame
df2 = pd.DataFrame(
    {"sections": ["A", "B", "C", "F", "G"], "points": [19, 23, 20, 24, 30]}
)
print("\n\nSecond DataFrame:")
print(df2)

# outer join
outer_join = df1.merge(df2, how="outer", indicator=True)

# right anti join
right_anti_join = outer_join[(outer_join._merge == "right_only")].drop("_merge", axis=1)
print("\n\nRight Anti-join:")
print(right_anti_join)

출력:

First DataFrame:
  sections  points
0        A      19
1        B      23
2        C      20
3        D      15
4        E      31


Second DataFrame:
  sections  points
0        A      19
1        B      23
2        C      20
3        F      24
4        G      30


Right Anti-join:
  sections  points
5        F      24
6        G      30

이번에는 교차를 제외하고 오른쪽 데이터 프레임(df2)에서 열을 가져옵니다.

Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook