Pandas는 두 개 이상의 데이터 프레임 또는 시리즈를 결합할 때 merge함수나 concat함수를 사용한다
Merge 함수를 이용한 결합
1. Merge방향
import numpy as np
import pandas as pd
data1 = {
"학번": [1,2,3,4],
"이름": ["홍길동","최길동", "아이유", "김연아"],
"학년": [2,3,3,1]
}
data2 = {
"학번": [1,2,4,5],
"학과": ["컴퓨터", "미술", "철학", "사회"],
"학점": [1.3,3.5,4.3,2.3]
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
display(df1)
display(df2)
Inner Join
display(pd.merge(df1, df2, on="학번", how="inner"))
Outer Join ( = Full join in R)
display(pd.merge(df1, df2, on="학번", how="outer"))
display(pd.merge(df1, df2, on="학번", how="left"))
display(pd.merge(df1, df2, on="학번", how="rigt"))
2. 컬럼명이 다른 경우의 결합
컬럼명이 달라도 다음과 같이 결합이 가능하다
각 데이터 프레임의 기준을 명시하기 위해 left_on과 right_on이라는 인수를 지정해준다.
단, 결과로 출력되는 데이터 프레임에 두 가지 기준열이 모두 출력된다는 점에 유의해야 한다.
data1 = {
"학번": [1,2,3,4],
"이름": ["홍길동","최길동", "아이유", "김연아"],
"학년": [2,3,3,1]
}
data2 = {
"학생학번": [1,2,4,5],
"학과": ["컴퓨터", "미술", "철학", "사회"],
"학점": [1.3,3.5,4.3,2.3]
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
display(df1)
display(df2)
display(pd.merge(df1, df2,
left_on="학번",
right_on="학생학번",
how="inner"))
3. 인덱스(Index)를 이용한 결합
Data Frame의 인덱스를 사용하여 결합하는 경우 left_index 또는 right_index 인수를 True로 설정한다.
한쪽 또는 양쪽 데이터 프레임을 모두 index로 설정 가능하다.
data1 = {
"학번": [1,2,3,4],
"이름": ["홍길동","최길동", "아이유", "김연아"],
"학년": [2,3,3,1]
}
data2 = {
"학과": ["컴퓨터", "미술", "철학", "사회"],
"학점": [1.3,3.5,4.3,2.3]
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
df2.index = [1,2,4,5]
display(pd.merge(df1, df2,
left_on="학번",
right_index = True,
how="inner"))
Concat 함수를 이용한 결합
concat 함수는 Merge함수와 달리, 기준열(Key Column)을 지정하지 않고 단순히 데이터를 연결(concatenate)한다.
기본적으로 위/아래로 데이터 행열을 연결하게 되는데,
두 시리즈(Series)나 데이터프레임(Data Frame)을 단순히 연결하기 때문에 인덱스(Index) 값이 중복될 위험이 있다.
- 결합방향의 지정: axis 옵션을 이용한다. axis = 0은 횡으로 결합하는 옵션이고, axis = 1 는 열로 결합하는 옵션이다. 열로 결합결합시 정렬 옵션은 sort를 이용한다
- 정렬유무 지정: sort 를 True로 지정하면 오름차순으로 정렬된다. False로 지정하면 정렬없이 결합된다.
s1 = pd.Series([0,1], index = ["a","c"])
s2 = pd.Series([4,3,2], index = ["b","c","e"])
s1
s2
행결합
display(pd.concat([s1,s2], axis = 0))
열결합
display(pd.concat([s1,s2], axis = 1, sort = True))
'데이터사이언스' 카테고리의 다른 글
191126 [Python 기초통계] 상관관계 상관계수 (0) | 2019.11.26 |
---|---|
191120 [Python] Pandas (0) | 2019.11.20 |
191112 [Python] 제어문 문법 If For While (0) | 2019.11.13 |
191113 [python]Jupyter notebook 활용시 주의사항 (0) | 2019.11.13 |
191112 [Python] 코딩 연습문제_datatype & 제어문 활용 (0) | 2019.11.12 |