Search

데이터 병합(MERGE/ CONCAT/JOIN)

1) Concat (데이터 연결)

데이터프레임 두개를 단순히 연결할 때 사용한다. 단순히 두 개의 데이터 프레임을 세로로(혹은 가로로) 합치는 것이기 때문에 각 데이터프레임의 index도 그대로 중복되서 나타난다. 따라서 보통은 .reset_index(drop=True) 를 해준다.
# 고정된 난수 발생을 위해서 seed 설정 import numpy as np np.random.seed(1) # 3X2 정수로 구성된 매트릭스 생성 df1 = pd.DataFrame(np.random.randint(0,9,(3,2)), index=['a','b','c'], columns = ['one','two'])
Python
복사
# 2행 2열로 구성된 매트릭스 생성 df2 = pd.DataFrame(np.random.randint(0,9,(2,2)), index=['a','b'], columns=['three','four'])
Python
복사
# 열방향으로 연결 result_df = pd.concat([df1,df2], axis=1) # 행방향으로 연결 result_df2 = pd.concat([df1,df2], axis=0)
Python
복사

2) Merge

Merge는 판다스의 메소드
merge는 컬럼을 기준으로 병합한다
merge는 두 데이터프레임을 공통된 항목을 기준으로 합치는 것이다. merge 의 방법에는 inner, left, right, outer 가 있다.

2-1) inner

두 데이터프레임의 교집합을 출력한다. 즉, 결합하는 데이터프레임의 공통된 항목에 대해서만 출력한다.
pd.merge(데이터프레임1, 데이터프레임2, on=’기준이 되는 칼럼’, how=’inner’)

2-2) left

두 데이터프레임의 교집합과 왼쪽 데이터프레임에는 있지만 오른쪽 데이터프레임에는 없는 정보도 포함하여 출력한다. → how=’left’

2-3) right

두 데이터프레임의 교집합과 오른쪽 데이터프레임에는 있지만 왼쪽 데이터프레임에는 없는 정보도 포함하여 출력한다. → how = ‘right’

2-4) outer

두 데이터프레임의 합집합을 출력한다. → how=’outer’

2-5) join 하는 칼럼 이름이 다를 경우

merged_df = pd.merge(df1, df2, left_on='학번', right_on='학생고유번호', how='inner')
Python
복사
이떄, 컬럼의 이름이 다르기 때문에 두 컬럼이 모두 생기게 된다.
# 두 컬럼 중 하나의 컬럼은 제거해준다. merged_df.drop('학생고유번호', axis=1, inplace=True)
Python
복사

2-5) 인덱스를 기준으로 merge하기

data1 = { '학번' : [1,2,3,4], '이름' : ['아이유','김연아','홍길동','강감찬'], '학과' : ['철학', '경영', '컴퓨터', '물리'] } data2 = { '학년':[2,4,3,1], '학점':[1.5, 2.0, 4.1, 3.8] } df1 = pd.DataFrame(data1) df2 = pd.DataFrame(data2, index=[1,2,4,5]) # 인덱스를 지정 # 두 데이터프레임을 인덱스를 기준으로 병합 : 동일한 인덱스를 가진 행만 추출됨 merged_df1 = pd.merge(df1, df2, left_index=True, right_index=True, how='inner') # 왼쪽은 학번으로, 오른쪽은 인덱스를 기준으로 병합 merged_df2 = pd.merge(df1, df2, left_on='학번', right_index=True, how='inner')
Python
복사

3) 세개 이상의 데이터프레임을 merge

merge 는 한번에 두개의 데이터프레임만 합칠 수 있지만 합치고 다시 합치는 방식으로 계속 merge를 할 수 있다.

4) JOIN

join 은 기능적으로 merge 와 동일하다. 하지만, join 이 사용하기 더 번거로우므로 그냥 merge 를 사용하자!
join은 데이터프레임의 메소드
join은 인덱스를 기준으로 병합한다
df1.join(df2, on='c', how='inner') # inner join
Python
복사

5) 데이터 병합/연결 사용예시

병합은 서로 다른 성격을 가진 테이블을 합쳐 분석용을 위해 취합할 경우 많이 사용된다.
연결은 여러 그룹으로 산재된 데이터를 하나로 취합할 경우 사용된다. (월별 데이터 → 연간 데이터)