파이썬/판다스
concat() 함수로 여러 데이터프레임 합치기 [python/pandas]
leon_choi
2022. 8. 21. 17:39
반응형
데이터프레임은 구성의 형태와 속성이 균형하담녀 행 또는 열 중에 어느 한 방향으로 이어 붙여도 데이터의 일관성을 유지할 수 있습니다. 오늘은 기존 데이터프레임의 형태를 유지하면서 이어 붙이는 concat() 함수에 대해 알아보겠습니다. 우선 예제를 만들어 보겠습니다.
import pandas as pd
df1 = pd.DataFrame({'a':['a0','a1','a2','a3'],
'b':['b0','b1','b2','b3'],
'c':['c0','c1','c2','c3']},
index=[0,1,2,3])
df2 = pd.DataFrame({'a':['a2','a3','a4','a5'],
'b':['b2','b3','b4','b5'],
'c':['c2','c3','c4','c5'],
'd':['d2','d3','d4','d5']},
index=[2,3,4,5])
print(df1,'\n')
print(df2,'\n')
#df1, df2합치기
result1 = pd.concat([df1,df2])
print(result1,'\n')
a b c
0 a0 b0 c0
1 a1 b1 c1
2 a2 b2 c2
3 a3 b3 c3
a b c d
2 a2 b2 c2 d2
3 a3 b3 c3 d3
4 a4 b4 c4 d4
5 a5 b5 c5 d5
a b c d
0 a0 b0 c0 NaN
1 a1 b1 c1 NaN
2 a2 b2 c2 NaN
3 a3 b3 c3 NaN
2 a2 b2 c2 d2
3 a3 b3 c3 d3
4 a4 b4 c4 d4
5 a5 b5 c5 d5
네 이렇게 concat() 함수를 통해서 예제를 합쳐봤는데요. 결과를 보면 df1에 없는 d컬럼의 경우 합쳐졌을 때 df1은 NaN처리가 돼 있는 것을 확인할 수 있습니다. 현재 결과물을 위아래로 합쳐졌는데 좌우로 합치는 것은 어떻게 하면 될까요? 그리고 모든 데이터를 합치는 것이 아니라 결측치가 없는 인덱스만 추출하려면 어떻게 해야 할까요? 이때는 concat()함수에 옵션들을 사용합니다. 예제를 통해 직접 확인해보겠습니다.
#2개의 데이터프레임을 좌우 열 방향으로 이어 붗이듯 연결하기
result2 = pd.concat([df1,df2], axis=1)
print(result2,'\n')
#join = 'inner' 옵션 적용하기(교집합)
result2_in = pd.concat([df1, df2], axis=1, join='inner')
print(result2_in,'\n')
a b c a b c d
0 a0 b0 c0 NaN NaN NaN NaN
1 a1 b1 c1 NaN NaN NaN NaN
2 a2 b2 c2 a2 b2 c2 d2
3 a3 b3 c3 a3 b3 c3 d3
4 NaN NaN NaN a4 b4 c4 d4
5 NaN NaN NaN a5 b5 c5 d5
a b c a b c d
2 a2 b2 c2 a2 b2 c2 d2
3 a3 b3 c3 a3 b3 c3 d3
좌우 열 방향으로 두 데이터프레임을 합쳤고 결측치가 없는 프레임만 추출해봤습니다. 여기에 사용한 옵션은 "axis="와 "join="옵션을 사용했는데요. join='inner' 옵션을 설정하면 연결할 데이터프레임들의 행 인덱스의 교집합 기준으로 사용하게 됩니다. 그렇기 때문에 df1과 df2의 공통으로 들어가는 2번 3번 인덱스만이 추출됩니다. 이렇게 concat() 함수에 대해 알아봤는데요. 다음 편에서는 SQL의 join과 비슷한 merge()함수에 대해 알아보도록 하겠습니다.
반응형