EDA with Pandas - Data Merge
Page content
강의 홍보
- 취준생을 위한 강의를 제작하였습니다.
- 본 블로그를 통해서 강의를 수강하신 분은 게시글 제목과 링크를 수강하여 인프런 메시지를 통해 보내주시기를 바랍니다.
스타벅스 아이스 아메리카노를 선물
로 보내드리겠습니다.
- [비전공자 대환영] 제로베이스도 쉽게 입문하는 파이썬 데이터 분석 - 캐글입문기
I. 개요
- 실무 데이터에서는 여러가지 데이터를 만나는 경우가 흔하다.
- 이 때,
SQL
에서 데이터를 직접 병합하는 방법이 좋다. - 그러나, 현실적으로
DB
에 접근하는 권한을 가진 경우는 흔하지는 않다. 현재 운영중인 서비스상에DB
를 직접 만지는 경우는 거의 없다 (DBA가 할지도..) - 따라서, 데이터분석가는 흩어져 있는 데이터
Dump
를 받게 될 가능성이 큰데, 이 때 Python에서 데이터를 병합하는 작업을 진행하게 된다. Kaggle
이나 각종 경진대회에 출전하게 되면 서로 다른 데이터를 합쳐야 하는 경우가 매우 많다.
II. 모듈 Import
- 패키지 설치방법은 설치 문서를 확인한다.
import pandas as pd
print(pd.__version__)
1.0.4
- 데이터프레임을 보다 이쁘게 출력하기 위해 다음 2개의 패키지를 불러온다.
from IPython.core.display import display, HTML
from tabulate import tabulate
III. Pandas 데이터 병합 Sample Tutorial
- 간단하게 데이터를 병합하는 방법에 대해 실습을 진행한다.
- 데이터와 소스 코드는 Pandas 공식 홈페이지에서 한글 형태로 조금 수정했다.
(1) 파라미터 세팅
- 먼저, 행과 열을 최대 출력하는 개수를 지정한다.
pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 500)
(2) 데이터 생성
- 먼저 가상의 데이터를 두개 만든다.
temp_1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
'num1': [1,2,3,4]})
print(tabulate(temp_1, headers=['key', 'num'], tablefmt='pipe'))
| | key | num |
|---:|:------|------:|
| 0 | A | 1 |
| 1 | B | 2 |
| 2 | C | 3 |
| 3 | D | 4 |
temp_2 = pd.DataFrame({'key': ['A', 'B', 'E', 'F'],
'num2': [5,6,7,8]})
print(tabulate(temp_2, headers=['key', 'num'], tablefmt='pipe'))
| | key | num |
|---:|:------|------:|
| 0 | A | 5 |
| 1 | B | 6 |
| 2 | E | 7 |
| 3 | F | 8 |
(3) Data Merge - inner join
key
값을 근거로 데이터를 병합한다.- 이 때, merge의 형태는
inner join
형태로 출력된다.
merge_df = pd.merge(temp_1, temp_2, on='key')
print(tabulate(merge_df, headers=['key', 'num1', 'num2'], tablefmt='pipe'))
| | key | num1 | num2 |
|---:|:------|-------:|-------:|
| 0 | A | 1 | 5 |
| 1 | B | 2 | 6 |
inner_df = pd.merge(temp_1, temp_2, on='key', how='inner')
print(tabulate(inner_df, headers=['key', 'num1', 'num2'], tablefmt='pipe'))
| | key | num1 | num2 |
|---:|:------|-------:|-------:|
| 0 | A | 1 | 5 |
| 1 | B | 2 | 6 |
- 위 두개의 결과값이 똑같음을 확인할 수 있다.
(4) Data Merge - outer join
- 이번에는
outer join
을 해보자.
outer_df = pd.merge(temp_1, temp_2, on='key', how='outer')
print(tabulate(outer_df, headers=['key', 'num1', 'num2'], tablefmt='pipe'))
| | key | num1 | num2 |
|---:|:------|-------:|-------:|
| 0 | A | 1 | 5 |
| 1 | B | 2 | 6 |
| 2 | C | 3 | nan |
| 3 | D | 4 | nan |
| 4 | E | nan | 7 |
| 5 | F | nan | 8 |
- 결과값을 보면, 우선
key
값은 모두 출력되었다. - 이 때, 각 데이터에서 가져오는
num1
과num2
의Column
도 같이 들어오는데, 각column
마다 없는 값들은 이렇게nan
으로 조회됨을 확인할 수 있다.
(5) Assignment
- 이제 수강생 분들이
left
&right
조인을 해보도록 한다. - 공식문서를 보면서 코드 작성하는 것을 추천한다.
- Merge, join, and concatenate
- 먼저
right join
을 해본다.
# pd.merge(temp_1, temp_2) 여기 코드에서 남은 코드를 작성하면 됩니다.
right_df = pd.merge(temp_1, temp_2, on='key', how='left')
print(tabulate(right_df, headers=['key', 'num1', 'num2'], tablefmt='pipe'))
| | key | num1 | num2 |
|---:|:------|-------:|-------:|
| 0 | A | 1 | 5 |
| 1 | B | 2 | 6 |
| 2 | E | nan | 7 |
| 3 | F | nan | 8 |
- 그리고 이번에는
left join
을 해본다.
# pd.merge(temp_1, temp_2) 여기 코드에서 남은 코드를 작성하면 됩니다.
right_df = pd.merge(temp_1, temp_2, on='key', how='left')
print(tabulate(right_df, headers=['key', 'num1', 'num2'], tablefmt='pipe'))
| | key | num1 | num2 |
|---:|:------|-------:|-------:|
| 0 | A | 1 | 5 |
| 1 | B | 2 | 6 |
| 2 | C | 3 | nan |
| 3 | D | 4 | nan |
VI. What’s next
- 데이터를 병합하는 방법 중
Merge
에 대해서 배웠다. Merge
에는 크게 4가지 방법이 있고, 방법에 따라서 최종 데이터의 출력값이 서로 다름을 확인하였다.- 다음 시간에는 또다른 병합 방법인
Concatenate
에 학습하도록 한다.