본문 바로가기

Phython/pandas

데이터 프레임 합치기 concat(), merge(), join

pd. concat()   : 데이터 프레임 붙이기                                                     # R의 rbind(), cbind()와 유사함

 

  

[디폴트 설정 보기 ]

   pd.concat ( objs,
                      axis=0,       # 0 : 위아래로 합치기, 1 : 왼쪽 오른쪽 합치기

                      join = 'outer',       # 'inner' : , 'outer' : 

                     ignore_index=False,      #  False : 기존의 인덱스 유지, True : 기존의 인덱스 무시

                     keys=None,       #계층적 index 사용하려면 keys 튜플 입력

                     levels = None,   #수준

                     names = None,  # index에 이름을 부여하려면 names 튜플 입력

                     verify_integrity = False,  #중복 

                     copy=True,        #복사

                    )  

  

데이터 개수로 결합 확인하기

세로로 결합되기 때문에 table1 데이터 개수 + table2 데이터 개수 = 결합된 새로운 table의 데이터 개수 가 성립하게 된다. 

 

 


 

 

pd. merge() : 데이터 프레임 합치기                                                          # SQL의 join과 같은 역할

 

 

# 기준열 이름이 같을 때    pd.merge(left, right, on = '기준열', how = '조인방식')

# 기준열 이름이 다를 때    pd.merge(left, right, left_on = '왼쪽 열', right_on = '오른쪽 열', how = '조인방식' # left join, right                                                                                                                          join, inner join(교집합), outer join(합집합))

 

left : 왼쪽 데이터프레임

right : 오른쪽 데이터프레임

on : (두 데이터프레임의 기준열 이름이 같을 때) 기준열

how : 조인 방식 {'left', 'right', 'inner', 'outer'} 기본값은 'inner'

 

left_on : 기준열 이름이 다를 때, 왼쪽 기준열

right_on : 기준열 이름이 다를 때, 오른쪽 기준열

 

두 데이터프레임의 열 이름이 다를 때

위 예시처럼 양쪽 데이터프레임에서 merge의 기준이 되는 열의 이름이 같다면 on = '기준열'로 지정해주면 된다. 하지만 양쪽 데이터프레임에서 기준이 되는 열의 이름이 다르다면 각각 left_on = '왼쪽 열', right_on = '오른쪽 열'로 지정하면 된다.

pd.merge(left, right, left_on = '왼쪽 열', right_on = '오른쪽 열')

 

데이터 개수 확인

일반적으로는 table 1+ table 2결합시, left조인인 경우 table1의 데이터 개수 유지, right 조인인 경우 table2의 데이터 개수 유지하겠지만, 단지 조인할 데이터의 조인키에 중복 데이터가 존재하는 경우에는 데이터 개수가 늘어날 수 있기 때문에 주의해야 한다. 

 


 

 

 

 

 

'Phython > pandas' 카테고리의 다른 글

loc(), iloc()  (1) 2023.06.20
matplotlib()  (2) 2023.06.13
groupby(), groups.func()  (0) 2023.06.12