데이터분석/파이썬

pandas 데이터 분석 3 - 데이터 합치기(merge, append, inner join, left outer join, right outer join, full outer join)와 컬럼명 바꾸기(rename)

devbean 2021. 12. 4. 22:05
반응형

https://kbkb456.tistory.com/84

 

pandas 데이터 분석 2 - 데이터 프레임 슬라이싱(loc, iloc), 데이터 필터링(isin)

https://kbkb456.tistory.com/76 pandas 데이터 분석 1 - csv, 엑셀파일, json을 데이터 프레임으로 불러오기(read_csv, read_excel, read_json) 오늘은 파이썬의 pandas 라이브러리를 활용을 해서 데이터를 불러..

kbkb456.tistory.com

샘플 데이터

야근수당2.csv
0.00MB
직원연차.csv
0.00MB
야근수당.csv
0.00MB

오늘은 데이터 프레임끼리 합치는 법에 대해서 배우도록 하겠습니다.

 

이런 경우 매우 유용한 함수라고 보시면 됩니다.

1. 엑셀이든 csv든 같은 칼럼명으로 여러 파일로 쪼개진 경우

2. 특정키로 어떤 값을 찾거나 조인해야되는 경우(엑셀의 vlookup)

 

1. merge

pandas에서 특정 키로 조인해야되는 경우 활용하는 함수입니다.

 

join의 원리

- 조인은 두 데이터 프레임간에 특정 키를 가지고 하나의 데이터 프레임으로 만들어 주는 함수입니다.

 

문법

#두 데이터 프레임의 키값이 컬럼명이 다른 경우

pd.merge(왼쪽 데이터프레임1, 오른쪽 데이터프레임2, 
         left_on = [왼쪽 데이터프레임1의 키], right_on = [오른쪽 데이터프레임2 의 키],
         how = 조인종류)
         
# 두 데이터 프레임 간의 키가 되는 컬럼명이 같은 경우

pd.merge(왼쪽 데이터프레임1, 오른쪽 데이터프레임2,
         on = [키값],
         how = 조인종류)

 

예시 데이터

 

야근 수당 데이터

merge 예시 데이터 1

연차 데이터

merge 예시 데이터 2

여기서 두 데이터 프레임간의 조인 키는 무엇일까요?

- 야근 수당 데이터: 이름

- 연차 데이터: 사원_이름


서로 키가되는 칼럼의 이름이 다르기 때문에 left_on, right_on을 활용해보겠습니다.

 

join의 종류

 

- inner join: 서로 키가 같은 데이터만 남기는 조인 방법입니다. 일종의 두 데이터 프레임에서 키가 되는 칼럼끼리 짝을 찾는 과정이라고 보면 됩니다. 

 

코드

pd.merge(df,year_df,left_on=['이름'],right_on=['사원_이름'],how='inner')

 

실행 결과

inner join

- 서로 키값이 일치하는 a,b는 전부 합쳐짐

- 왼쪽에서 짝을 찾지못한 c는 버려짐

- 오른쪽에서 짝을 찾지 못한 d, e, f는 버려짐

 

 

- left outer join: 왼쪽 데이터 프레임의 키값을 모두 존중해주고 만약 일치되지 않는 경우 NaN을 남겨주는 조인 방법입니다. 보통 왼쪽 데이터 프레임을 모두 남겨야 할 때 활용합니다. 

 

코드

pd.merge(df,year_df,left_on=['이름'],right_on=['사원_이름'],how='left')

실행결과

left outer join

- 서로 키값이 일치하는 a, b는 전부 합쳐짐

- 왼쪽에 짝을 찾지 못한 c는 왼쪽 야근수당 데이터들은 남음

- 오른쪽에서 짝을 찾지 못한 d, e, f는 버려짐

- 왼쪽에서 짝을 찾지 못한 c의 연차, 사원 이름이 NaN으로 남음

 

- right outer join: 오른쪽 데이터 프레임의 키값을 모두 존중해주고 만약 일치되지 않는 경우 NaN을 남겨주는 조인 방법입니다. 보통 오른쪽 데이터 프레임을 모두 남겨야 할 때 활용합니다. 

 

코드

pd.merge(df,year_df,left_on=['이름'],right_on=['사원_이름'],how='right')

 

실행결과

right outer join

- 서로 키값이 일치하는 a, b는 전부 합쳐짐

- 왼쪽에 짝을 찾지 못한 c는 버려짐

- 오른쪽에서 짝을 찾지 못한 d, e, f는 연차 데이터만 남음

- 오른쪽에서 짝을 찾지 못한 d, e, f의 월, 이름, 야근, 휴일, 수당은 NaN으로 남음

 

- full outer join: 왼쪽 오른쪽 모든 키 값을 존중해주는 방법으로  일치되는 키값의 데이터는 합쳐지고 나머지 키값에 합쳐지지 않는 값은 NaN으로 남습니다. 보통 양쪽의 데이터를 모두 살려야 할 때 활용합니다.

 

코드

pd.merge(df,year_df,left_on=['이름'],right_on=['사원_이름'],how='outer')

 

실행결과

full outer join

- 서로 키값이 일치하는 a, b는 전부 합쳐짐

- 왼쪽에서 짝을 찾지 못한 c의 연차, 사원 이름이 NaN으로 남음

- 오른쪽에서 짝을 찾지 못한 d, e, f의 월, 이름, 야근, 휴일, 수당은 NaN으로 남음

 

2. append

append는 여러 데이터 프레임이 칼럼명이 같을 때 한파일로 데이터 프레임으로 합쳐주는 함수라고 보면 됩니다.

(보통 엑셀 파일이나 csv를 여러 파일로 쪼개서 받은걸 가지고 합쳐서 데이터 분석할 때 활용합니다.)

 

문법

데이터프레임1.append(데이터프레임2, sort = False)

 

샘플데이터

append 샘플데이터

 

 

두 데이터를 하나의 데이터 프레임으로 합쳐봅시다.

 

코드

df3 = df.append(df2,sort=False)
df3

 

실행결과

pandas append

칼럼명이 같아야 완벽하게 잘 합쳐집니다.

 

그러면 컬럼명이 다른 경우는 어떻게 될까?

이름이 사원이름이라는 컬럼명으로 되어있다.

위의 데이터로 다시 합쳐봅시다

 

 

pandas append 2

다른 칼럼으로 인식하여 합쳐지긴 하지만 빈자리에는 NaN으로 채워지게 됩니다.

물론 다른 칼럼이 있는 경우는 이렇게 활용해도 됩니다.

 

3. rename

이런 경우 사원 이름을 이름으로 칼럼명을 바꿔서 다시 append를 하면 해결할 수 있을 것이다. 이럴 때 필요한 게 rename 함수입니다.

 

문법

데이터프레임.renamed({'바꾸고 싶은 컬럼명':'바꾸게 될 컬럼명 이름'}, axis='columns')

 

 

이 데이터 프레임의 사원이름을 이름으로 바꿔보자.

코드

df2 = df2.rename({'사원이름': '이름'}, axis='columns')
df2.head()

 

실행결과

pandas rename

칼럼명이 사원 이름에서 이름으로 바뀐 걸 알 수 있습니다.

 

https://colab.research.google.com/drive/1zO7mDkQUv3dbp7PiisXgjGR7V90dBRIc?usp=sharing 

 

pandas 샘플코드.ipynb

Colaboratory notebook

colab.research.google.com

 

반응형