파이썬/판다스

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()함수에 대해 알아보도록 하겠습니다.

반응형