ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬] 데이터프레임 합치는 3가지 방법
    파이썬 배우기 2023. 11. 21. 12:12

    데이터 분석을 할 때, 데이터셋끼리 데이터를 붙여서 정보를 추가할 일이 많습니다. 또한 각자 맡은 일을 진행한 뒤 합치는 협업을 할 때도 많이 쓰이죠. 파이썬으로 데이터프레임을 합치는 방법 3가지와 사용된 방법 특징을 알려드리겠습니다! 잘 공부해서 두 데이터프레임의 특성과 관계에 따라 적용을 잘해서 알맞게 쓰시면 좋겠습니다. 

     

    우선 데이터프레임이 2개 있을 때 A, B 
    1. A.join(B) 

      - A에 B를 합쳐줍니다.

      - join은 데이터프레임 자체가 가지고 있는 함수이기 때문에 어떤 라이브러리를 불러올 필요가 없습니다.
      - 위아래로 섞여있어도 알맞게 잘 합쳐줍니다.
      - 하지만 key를 설정을 따로 하지 않기 때문에, A, B 데이터 프레임의 index column 이 동일해야 합니다.
    2. pd.merge(A, B, left_on = '인덱스', how = 'inner/left/right/outer')  
      - A와 B를 '인덱스' 기준으로 붙일 것인데, 그 방법은 inner 또는 left 또는 right 또는 outer 중에 하나로 합칠 것입니다.

          (inner는 둘 다 있는 것만 나타내는 교집합으로,

            left는 왼쪽 데이터프레임 기준으로,

            right는 오른쪽 데이터프레임 기준으로,

            outer는 모두 다 나타내는 합집합으로)

      - 위아래로 섞여있어도 알맞게 잘 합쳐줍니다.
      - 기준이 되는 열이 서로 다른 이름을 가지고 있어도 OK! (left_on, right_on 을 활용해서 이름이 달라도 따로 합칠 키를 부여할 수 있기 떄문이죠)
    3. pd.concat([A, B], axis = )
      - A에 B를 axis 방향을 기준으로 그대로 합쳐줌

          (axis=0 위아래로 붙여주고,

           axis=1 옆으로 붙여준다, 디폴트는 axis=0)

      - 인덱스를 지정하는 것이 없기 때문에, 인덱스 키가 동일하면 outer방식으로 합쳐지지만, 인덱스가 다르면 그대로 붙여지되 비어있는 값 전부 NaN 처리가 됩니다.

      - 행방향, 열방향으로 모두 적용이 가능. 그러나 위아래로 붙일 때 많이 씁니다

      - 두 개 이상의 데이터프레임을 합칠 수 있습니다! 여러개를 한 번에 concat 가능!

      - 대괄호를 꼭 써줘야 합니다! 안그러면 에러남!

      - concatenate

     

    예시

    A~F학생별 국어점수 데이터프레임과, 영어점수 데이터프레임을 만듭니다. 

    df_kor = pd.DataFrame(np.random.randint(0, 100, size =(1,5)).T, index=list('ABCDE'), columns=['kor_score']) 
    df_eng = pd.DataFrame(np.random.randint(0, 100, size =(1,4)).T, index=list('ABDF'),  columns=['eng_score']) 
    
    # Result
       kor_score
    A         74
    B         85
    C         23
    D         74
    E         62
    
       eng_score
    A         84
    B          8
    D         28
    F         83

     

    첫 번째 방법인 join!! (merge의 left와 동일한 결과를 리턴합니다)

    df_kor.join(df_eng)
    
    # Result
       kor_score  eng_score
    A         74       84.0
    B         85        8.0
    C         23        NaN
    D         74       28.0
    E         62        NaN

     

    두 번째 방법인 merge!!

    df_inner = pd.merge(df_kor, df_eng, left_index=True, right_index=True, how='inner')  
    df_left  = pd.merge(df_kor, df_eng, left_index=True, right_index=True, how='left')  
    df_right = pd.merge(df_kor, df_eng, left_index=True, right_index=True, how='right')  
    df_outer = pd.merge(df_kor, df_eng, left_index=True, right_index=True, how='outer')  
    
    # inner
       kor_score  eng_score
    A         74         84
    B         85          8
    D         74         28
    # left
       kor_score  eng_score
    A         74       84.0
    B         85        8.0
    C         23        NaN
    D         74       28.0
    E         62        NaN
    # right
       kor_score  eng_score
    A       74.0         84
    B       85.0          8
    D       74.0         28
    F        NaN         83
    # outer
       kor_score  eng_score
    A       74.0       84.0
    B       85.0        8.0
    C       23.0        NaN
    D       74.0       28.0
    E       62.0        NaN
    F        NaN       83.0

     

    세 번째 방법인 concat !! 

    df_axis0 = pd.concat([df_kor, df_eng], axis=0)
    df_axis1 = pd.concat([df_kor, df_eng], axis=1)
    
    # axis = 0 열방향 그대도 위아래로 붙이기
    kor_score  eng_score
    A       74.0        NaN
    B       85.0        NaN
    C       23.0        NaN
    D       74.0        NaN
    E       62.0        NaN
    A        NaN       84.0
    B        NaN        8.0
    D        NaN       28.0
    F        NaN       83.0
    
    # axis = 1 행방향 옆으로 붙이기
       kor_score  eng_score
    A       74.0       84.0
    B       85.0        8.0
    C       23.0        NaN
    D       74.0       28.0
    E       62.0        NaN
    F        NaN       83.0

     

    참고로 NaN null 값 처리는 .fillna() 를 이용하시면 됩니다!

Designed by Tistory.