데이터분석/Pandas
[Pandas] DataFrame Join (concat, merge)
뭐든일단시작
2021. 7. 12. 23:29
[Pandas] 데이터 프레임 합치기 연습¶
In [1]:
import pandas as pd
In [2]:
df1 = pd.DataFrame({
'id' : [1, 2, 3],
'customer_id' : [1, 2, 3],
'customer_name' : ['Robert', 'Peter', 'Dave']
})
df1
Out[2]:
id | customer_id | customer_name | |
---|---|---|---|
0 | 1 | 1 | Robert |
1 | 2 | 2 | Peter |
2 | 3 | 3 | Dave |
In [3]:
df2 = pd.DataFrame({
'id' : [1, 2, 3],
'order_id' : [100, 200, 300],
'order_date' : ['2021-01-21', '2021-02-03', '2020-10-01']
})
df2
Out[3]:
id | order_id | order_date | |
---|---|---|---|
0 | 1 | 100 | 2021-01-21 |
1 | 2 | 200 | 2021-02-03 |
2 | 3 | 300 | 2020-10-01 |
concat(): 두 데이터 프레임을 합치는 첫번째 방법¶
- pd.concat([df1, df2])
In [4]:
pd.concat([df1, df2]) #위 아래로 붙이기
Out[4]:
id | customer_id | customer_name | order_id | order_date | |
---|---|---|---|---|---|
0 | 1 | 1.0 | Robert | NaN | NaN |
1 | 2 | 2.0 | Peter | NaN | NaN |
2 | 3 | 3.0 | Dave | NaN | NaN |
0 | 1 | NaN | NaN | 100.0 | 2021-01-21 |
1 | 2 | NaN | NaN | 200.0 | 2021-02-03 |
2 | 3 | NaN | NaN | 300.0 | 2020-10-01 |
In [5]:
pd.concat([df1, df2], axis = 1) #axis = 0 : 위아래, axis = 1 : 왼쪽/오른쪽
Out[5]:
id | customer_id | customer_name | id | order_id | order_date | |
---|---|---|---|---|---|---|
0 | 1 | 1 | Robert | 1 | 100 | 2021-01-21 |
1 | 2 | 2 | Peter | 2 | 200 | 2021-02-03 |
2 | 3 | 3 | Dave | 3 | 300 | 2020-10-01 |
merge(): 두 데이터 프레임을 합치는 두번째 방법¶
- SQL의 JOIN 함수와 동일
- pd.merge(df1, df2, on = 'Column name', how = 'join_methid(inner, outer, left, right')
- 결합방법
- inner : 내부 조인 - SQL의 INNER JOIN 과 동일
- outer : 완전 외부 조인 - SQL의 OUTER JOIN 과 동일
- left : 왼쪽 우선 외부 조인 - SQL의 LEFT OUTER JOIN 과 동일
- right : 오른쪽 우선 외부 조인 - SQL의 RIGHT OUTER JOIN 과 동일
In [6]:
df1 = pd.DataFrame({
'id' : [1, 2, 3],
'customer_id' : [1, 2, 3],
'customer_name' : ['Robert', 'Peter', 'Dave']
})
df1
Out[6]:
id | customer_id | customer_name | |
---|---|---|---|
0 | 1 | 1 | Robert |
1 | 2 | 2 | Peter |
2 | 3 | 3 | Dave |
In [7]:
df2 = pd.DataFrame({
'id' : [1, 2, 4],
'order_id' : [100, 200, 300],
'order_date' : ['2021-01-21', '2021-02-03', '2020-10-01']
})
df2
Out[7]:
id | order_id | order_date | |
---|---|---|---|
0 | 1 | 100 | 2021-01-21 |
1 | 2 | 200 | 2021-02-03 |
2 | 4 | 300 | 2020-10-01 |
merge(how = 'inner')¶
- on 컬럼값이 두 데이터 프레임에서 동일한 행만 가져옴
In [8]:
pd.merge(df1,df2) # default는 on = 첫번째 column, how = inner
Out[8]:
id | customer_id | customer_name | order_id | order_date | |
---|---|---|---|---|---|
0 | 1 | 1 | Robert | 100 | 2021-01-21 |
1 | 2 | 2 | Peter | 200 | 2021-02-03 |
In [9]:
pd.merge(df1,df2, on = 'id', how = 'inner')
Out[9]:
id | customer_id | customer_name | order_id | order_date | |
---|---|---|---|---|---|
0 | 1 | 1 | Robert | 100 | 2021-01-21 |
1 | 2 | 2 | Peter | 200 | 2021-02-03 |
merge(how = 'outer')¶
- 모든 Data를 Join
In [10]:
pd.merge(df1,df2, on = 'id', how = 'outer') # 모든 Data를 Join
Out[10]:
id | customer_id | customer_name | order_id | order_date | |
---|---|---|---|---|---|
0 | 1 | 1.0 | Robert | 100.0 | 2021-01-21 |
1 | 2 | 2.0 | Peter | 200.0 | 2021-02-03 |
2 | 3 | 3.0 | Dave | NaN | NaN |
3 | 4 | NaN | NaN | 300.0 | 2020-10-01 |
merge(how = 'left')¶
- left data frame(df1)의 id column 기준으로 join
In [11]:
pd.merge(df1,df2, on = 'id', how = 'left') # left data frame(df1)의 id column 기준으로 join
Out[11]:
id | customer_id | customer_name | order_id | order_date | |
---|---|---|---|---|---|
0 | 1 | 1 | Robert | 100.0 | 2021-01-21 |
1 | 2 | 2 | Peter | 200.0 | 2021-02-03 |
2 | 3 | 3 | Dave | NaN | NaN |
merge(how = 'right')¶
- right data frame(df2)의 id column 기준으로 join
In [12]:
pd.merge(df1,df2, on = 'id', how = 'right') # right data frame(df2)의 id column 기준으로 join
Out[12]:
id | customer_id | customer_name | order_id | order_date | |
---|---|---|---|---|---|
0 | 1 | 1.0 | Robert | 100 | 2021-01-21 |
1 | 2 | 2.0 | Peter | 200 | 2021-02-03 |
2 | 4 | NaN | NaN | 300 | 2020-10-01 |