Python/Pandas

pd.concat / df.append / pd.merge

frcn 2020. 3. 13. 18:44
반응형

1. pd.concat( )

 

pandas.concat

(objs, axis=0, join='outer', ignore_index: bool = False, keys=None, levels=None, names=None, verify_integrity: bool = False, sort: bool = False, copy: bool = True)

 

axis = 0 (default)

        0 = 세로 결합

        1 = 가로 결합

join = outer (default)

         outer = 합집합으로 결합

         inner = 교집합 결합

ignore_index = False (default bool)

                     False면 기존의 인덱스를 그대로 유지해서 결합

                    True면 새로운 정수형 인덱스를 생성

keys = None (default sequence)

          다중인덱스를 가지는 데이터프레임을 생성

levels = None (default list)

Specific levels (unique values) to use for constructing a MultiIndex. Otherwise they will be inferred from the keys.

names = None (default list)

             다중인덱스 생성 시, 인덱스 명 설정

verify_integrity = False (default bool)

                        Fasle = 인덱스가 중복되는지 검증하지 않음

                        True = 인덱스가 중복된다면 Error Return

sort = False (default bool) - 정렬

copy = True (default bool)

 

ex) axis, ignore_index

 

 

ex) join, key

 

join을 하게 되면, 열의 교집합만을 리턴하게 된다.

 

key를 설정하면, MultiIndex를 생성할 수 있다.

 

 

2. df.append( )

 

append는 간단하게 사용할 수 있다.

 

하지만 한번 사용할 때마다 새로운 데이터버퍼가 생성되기 때문에 반복적으로 append를 하는 것보다는 concat으로 한번에 연산하는 것이 효율적이다.

 

ex) x = a.append(b)

    x = b.append(c) 보다는

    x = concat(a,b,c) 가 더 효율적임.

 

 

 

3. pd.merge( )

 

merge는 1대1, 1대다, 다대다 병합을 모두 효율적으로 연산하는 메소드이다.

 

 

1) 1 대 1 

 

concat이나 append와 유사하다.

 

알아서 결합할 열을 찾아서 결합한다. 

 

word를 기준으로 결합

 

2. 1 대 다

 

열에 공통되는 요소가 있으면 알아서 중복처리를 해준다.

 

kor에 ㄴ이 2개 있으면, 알아서 맞춰준다.

 

ㄴ에 F가 2번 들어간 것을 알 수 있다.

 

3. 다 대 다

 

왼쪽, 오른쪽 키에 모두 중복되는 요소가 있으면 다음과 같이 처리된다.

 

알아서 중복해서 만들어준다.

 

A가 겹치자 count도 복사해서 결합해줬다.

 

 

하지만 결합 key를 명시적으로 지정하는 것이 더욱 확실하고 간단한 방법이다.

 

DataFrame.merge

(self, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None) 

 

 

on = label or list

       결합에 사용할 key값을 설정한다

left_on = label or list, or array-like

right_onlabel or list, or array-like

        왼쪽과 오른쪽의 서로 다른 이름의 열을 key로 결합하고 싶을 때 사용한다.

left_index = False (default bool)

right_index = False (default bool)

        인덱스를 key로 결합하고 싶을 때 사용한다.

sort = False(default bool)

how = 'inner'(default)

          inner = 교집합

          outer = 합집합 (누락된 값은 NA)

          left, right = 우결합, 좌결합

suffixes = (‘_x’, ‘_y’) (default tuple)

          key값이 아닌 열이 겹치면, 열의 이름을 지정한 keyword를 추가한다.

copy = True (default bool)

 

 

ex) on, left_on, right_on

parameter = on
left_on, right_on

left_on과 right_on을 사용할 경우, 중복되는 열이 생성되기 때문에 drop을 해주면 된다.

drop('name', axis = 1)

 

 

ex) left_index, right_index

left_index, right_index

인덱스를 기준으로 결합할 경우, 인덱스를 True해주면 된다.

 

만약 인덱스와 열을 결합하고 싶은 경우에는 다음과 같다.

 

left_index와 right_on을 같이 써도 아무 문제없다.

left_index, right_on

 

ex) suffixes

 

열이 충돌하면 이름 재설정.

 

아무 것도 설정하지 않으면 _x, _y가 디폴트.

on, suffixes

 

반응형