안녕하세요~ 꽁냥이에요. 데이터 분석을 하다 보면 여러 테이블을 합쳐야 하는데 칼럼이나 행이 일치하지 않아서 이를 일치시켜주어야 할 때가 있습니다. Pandas에서는 align이라는 함수를 이용하여 여러 데이터프레임에 대하여 칼럼 열(칼럼) 또는 행을 똑같이 맞출 수 있는데요. 이번 포스팅에서는 Pandas의 align 함수를 방법에 대해서 알아보겠습니다.
align 사용법
두개의 데이터프레임 df1, df2가 있다고 할 때 align의 사용법은 다음과 같습니다.
df1.align( df2, join, axis )
align은 두 데이터프레임을 결합할 때 사용하는 join 메서드와 비슷합니다. align 함수는 일치시킬 데이터프레임을 첫 번째 인자로 넣어줍니다. join 인자에는 일치시키는 방법을 말하며 'outer', 'inner', 'left', 'right' 총 4가지 방법을 지정할 수 있습니다. 각 방법의 의미는 다음과 같습니다.
그리고 axis=None이면 칼럼과 행을 모두 똑같게 해 주고, axis=1이면 칼럼을, axis=0이면 행을 일치시켜 줍니다. align 함수는 칼럼 또는 행이 일치된 두 데이터프레임을 리턴합니다.
글로 보면 이해가 안될 수 있는데 코드를 보면 바로 이해하실 수 있을 거예요. 먼저 두 개의 데이터프레임을 만들어 줍니다.
import pandas as pd
df1 = pd.DataFrame()
df1['A'] = [1, 2]
df1['B'] = [3, 4]
df1['C'] = [5, 6]
df2 = pd.DataFrame()
df2['A'] = [1, 2, 3]
df2['B'] = [4, 5, 6]
df2['E'] = [7, 8, 9]
1) 칼럼 일치
먼저 axis=1로 설정하여 칼럼을 맞춰 보겠습니다. 이때 join 방법에 따른 결과의 차이를 비교해 보세요.
a. outer
left, right = df1.align(df2, join='outer', axis=1) ## 두 데이터프레임 칼럼을 합하여 일치시킴
b. inner
left, right = df1.align(df2, join='inner', axis=1) ## 두 데이터프레임 공통 칼럼으로 일치시킴
c. left
left, right = df1.align(df2, join='left', axis=1) ## df1 칼럼으로 일치
c. right
left, right = df1.align(df2, join='right', axis=1) ## df2 칼럼으로 일치
2) 행 일치
이번엔 axis=0로 설정하여 행을 맞춰 보겠습니다. 이때 join 방법에 따른 결과의 차이를 비교해 보세요.
a. outer
left, right = df1.align(df2, join='outer', axis=0) ## 두 데이터프레임 행을 합하여 일치시킴
b. inner
left, right = df1.align(df2, join='inner', axis=0) ## 두 데이터프레임 공통 행으로 일치시킴
c. left
left, right = df1.align(df2, join='left', axis=0) ## df1 행으로 일치
이 경우는 inner의 결과와 동일
d. right
left, right = df1.align(df2, join='right', axis=0) ## df2 행으로 일치
3) 칼럼 행 모두 일치
axis=None으로 설정하면 칼럼과 행을 모두 일치시킨 결과를 받을 수 있습니다. 즉, 두 데이터프레임의 사이즈가 동일하면서 칼럼과 행까지 모두 같아지는 것입니다. 합쳐지는 원리는 앞에서 살펴본 것과 동일하므로 여기에서는 outer 결과만을 보도록 하겠습니다.
left, right = df1.align(df2, join='outer', axis=None) ## 두 데이터프레임의 칼럼과 행을 모두 합하여 일치
이번 포스팅에서는 두 데이터프레임의 칼럼 또는 행을 일치시키는 것을 join 메서드 별로 살펴보았습니다. 실제로 칼럼과 행이 동일하지 않은 데이터프레임을 하나로 합칠 때 align을 잘 활용하면 매우 유용합니다.
부디 이번 포스팅이 많은 분들에게 도움이 되길 바라며 이상 포스팅 마치겠습니다. 다음에 또 만나요~
댓글