티스토리 뷰
내용이 길어져서 위 글에서 분리 했습니다. 'Python Pandas 사용 방법'
www.youtube.com/watch?v=xNkLIimJlKA
이 내용은 데이터베이스 정규화, Join에 대해 알고 써야 해서 위 링크를 첨부합니다.
데이터를 다루다 보면 데이터를 합치고 싶을 때가 있습니다. 물론 pandas에서도 합칠 수 있습니다. 이 기능을 join이라고 하는데 pandas에서는 .merge()함수로 join을 구현 할 수 있습니다.
Merge(join)
inner join
import pandas as pd
from pandas import DataFrame as df
과자목록1 = ['초코-파이','몽-쉘','빼빼로','호두파이','별-사탕']
과자목록2 = ['초코-파이','몽-쉘','바나나킥','땅콩파이','못난감자','초코칩쿠키','엄마손파이']
가격1 = ['500', '1000', '700', '800', '600']
가격2 = ['550', '1500', '750', '800', '600','500','400']
df1 = df(data={'과자': 과자목록1, '비고' : 0})
df2 = df(data={'과자': 과자목록2,'가격':가격2})
df_merged = pd.merge(df1, df2, on='과자')
print(df_merged)
right join
# 위와 같음
df_merged = pd.merge(df1, df2, how='right', on='과자')
여러개 column으로 merge하기
import pandas as pd
owner = {'p1.age': [56], 'p1.sex':[1], 'p2.age':[53], 'p2.sex':[2]}
pop = {'p1.age': [56], 'p1.sex':[1], 'p2.age':[53], 'p2.sex':[2], 'p3.age':[4], 'p3.sex':[1]}
df_owner = pd.DataFrame(owner)
df_pop = pd.DataFrame(pop)
# 4개의 key로 merge해야 함 add_code, p1.sex, p2.sex, p1.age, p2.age
df_merged = pd.merge(df_owner, df_pop, on=['p1.age', 'p1.sex', 'p2.age', 'p2.sex'])
print(df_merged)
결과
p1.age p1.sex p2.age p2.sex p3.age p3.sex
0 56 1 53 2 4 1
Merge test 1
import pandas as pd
df_owner = pd.DataFrame({'p1.age': [56, 56], 'p1.sex':[1,1], 'p2.age':[53, 54], 'p2.sex':[2, 2]})
df_pop = pd.DataFrame({'p1.age': [56], 'p1.sex':[1], 'p2.age':[53], 'p2.sex':[2], 'p3.age':[4], 'p3.sex':[1]})
df_merged = pd.merge(df_owner, df_pop, on=['p1.age', 'p1.sex', 'p2.age', 'p2.sex'])
print(df_merged)
결과
p1.age p1.sex p2.age p2.sex p3.age p3.sex
0 56 1 53 2 4 1
위와 같이 df_owner에는 2줄의 record가 있고 df_pop에는 1개의 record만 있을 때 실제로 merge될 수 있는 것은 한줄 뿐입니다. 그래서 결과도 위와 같이 한줄로만 나옵니다.
Left Join
위와 같은 경우 df_owner에 record가 2개가 있지만 조인이 될 수 있는 것은 1줄 뿐이라서 한줄만 나왔습니다. 그러면 왼쪽(df_owner)에 있는 모든 record는 나오지만 오른쪽(df_pop)에 없는 값은 column만 보이게 join을 하고 싶다면 어떻게 할까요? Left Join을 쓰면 됩니다.
import pandas as pd
df_owner = pd.DataFrame({'p1.age': [56, 56], 'p1.sex':[1,1], 'p2.age':[53, 54], 'p2.sex':[2, 2]})
df_pop = pd.DataFrame({'p1.age': [56], 'p1.sex':[1], 'p2.age':[53], 'p2.sex':[2], 'p3.age':[4], 'p3.sex':[1]})
df_merged = pd.merge(df_owner, df_pop, how='left', on=['p1.age', 'p1.sex', 'p2.age', 'p2.sex'])
print(df_merged)
결과
p1.age p1.sex p2.age p2.sex p3.age p3.sex
0 56 1 53 2 4.0 1.0
1 56 1 54 2 NaN NaN
위 code와 같이 how에 left를 써주면 됩니다.
728x90
'Language > Python' 카테고리의 다른 글
How to query Elastic Search in Python (0) | 2020.10.27 |
---|---|
Python hashlib로 sha256인코딩한 hex값 만들기 (0) | 2020.09.27 |
Python에서 주소로 Tree만들기 법정동코드, 행정동코드 바꾸는 예제 (0) | 2020.09.19 |
Python에서 sqllite3이용하기(json insert, select) (0) | 2020.09.17 |
Python 행렬 연산 np.dot() (0) | 2020.09.16 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 도커티슈케이스
- 2017 티스토리 결산
- 도커티슈박스
- docker container whale
- docker container
- 싱가폴
- 도커각티슈박스
- docker container tissue
- 개발자
- shellscript
- 도커각티슈케이스
- 이직
- Sh
- docker container tissue box
- Linux
- vim
- 도커컨테이너
- docker container case
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함