#결과
B C D
A
a1 b1 c1 d1
a2 b2 c2 d2
1. concat
import pandas as pd
df1 = pd.DataFrame({'A':['a1', 'a2', 'a3'],
'B':['b1', 'b2', 'b3'],
'C':['c1', 'c2', 'c3']})
df2 = pd.DataFrame({'A':['a4', 'a5', 'a6'],
'D':['d1', 'd2', 'd3']})
위 데이터 프레임을 사용해 연습해보자
result = pd.concat([df1, df2])
print(result)
# 결과
A B C D
0 a1 b1 c1 NaN
1 a2 b2 c2 NaN
2 a3 b3 c3 NaN
0 a4 NaN NaN d1
1 a5 NaN NaN d2
2 a6 NaN NaN d3
concat 의 defalut 값은 axis=0이기에 위에서 아래 방향, 즉 행 방향으로 데이터 프레임을 이어 붙이고 해당하지 않는 값은 NaN값으로 채워진다.
* 여기서 인덱스가 012012 로 약간 보기 싫게 되어있는 것을 볼 수 있는데 이는 ignore_index=True로 해결해 줄 수 있다.
result = pd.concat([df1,df2], ignore_index=True)
result = pd.concat([df1, df2])
print(result)
# 결과
A B C A D
0 a1 b1 c1 a4 d1
1 a2 b2 c2 a5 d2
2 a3 b3 c3 a6 d3
또, axis=1 옵션으로 좌에서 우로, 열방향 concat이 가능하다.
2. merge
import pandas as pd
df1 = pd.DataFrame({'A':['a1', 'a2', 'a3'],
'B':['b1', 'b2', 'b3'],
'C':['c1', 'c2', 'c3']})
df2 = pd.DataFrame({'A':['a1', 'a2', 'a6'],
'D':['d1', 'd2', 'd3']})
result = pd.merge(df1, df2)
print(result)
# 결과
A B C D
0 a1 b1 c1 d1
1 a2 b2 c2 d2
merge의 defalt 값은 on=None이여서, 두 데이터 프레임의 공통된 열과 그 열의 값을 기준으로 교집합(inner) 조인이 된다.
result = pd.merge(df1, df2, how='outer')
print(result)
# 결과
A B C D
0 a1 b1 c1 d1
1 a2 b2 c2 d2
2 a3 b3 c3 NaN
3 a6 NaN NaN d3
how='outer'옵션을 주어 두 데이터셋의 공통된 열에서 유니크 값을 기준으로 합쳐지며 없는 값은 NaN으로 표기된다.
how='left'로 옵션을 바꿔주면 left join이 되어 왼쪽에 입력한 df1이 기준이 되는 결과가 나온다.
#결과
A B C D
0 a1 b1 c1 d1
1 a2 b2 c2 d2
2 a3 b3 c3 NaN
3. join
join 함수는 merge를 기반으로 만들어 졌기에 기본 작동 방식이 비슷하다. 그 중에서 차이점은 join 함수는 인덱스를 기준으로 결합한다는 것이다.
df1.set_index('A', inplace=True)
df2.set_index('A', inplace=True)
merge 예제와 같은 데이터 셋을 사용하지만 join은 인덱스 기준 결합이기 때문에 위 코드로 df1 과 df2 의 인덱스를 A 컬럼으로 지정해 준다.
result = df1.join(df2)
print(result)
# 결과
B C D
A
a1 b1 c1 d1
a2 b2 c2 d2
a3 b3 c3 NaN
df1의 인덱스를 기준으로 join 된 결과를 확인할 수 있다.
join 의 defalt는 how='left'이기 때문에, how='inner'옵션을 주면 아래와 같은 결과가 나온다.
'Python' 카테고리의 다른 글
[Python] String 을 List 형식으로 바꾸는 방법, String to List(+ String List to List) (0) | 2022.12.16 |
---|---|
[Python] Pandas dataframe 'isin' & 'not in' 사용법 (0) | 2021.11.29 |
[Python] 피클(Pickle)이란? / 사용 방법(저장, 읽기) (0) | 2021.09.30 |