본문 바로가기
방구석코딩/파이썬 기초문법

[파이썬] 데이터 결합 핸들링 - concat, merge, join, append

by 석세상 2024. 8. 16.
반응형

다음은 파이썬에서 데이터프레임을 결합할 때 사용되는 concat, merge, join, append 명령어에 대해 알아보겠다. 데이터를 결합하는 명령어는 중요한 명령어 중 하나로 결합을 잘못하는 경우 원하지 않는 데이터 형태로 만들어지기 때문에 사용법을 잘 알아두는 것이 중요하다.

 

 

1. concat 명령어

concat 명령어는 판다스에 데이터프레임이나 시리즈를 연결할 때 사용되는 함수이다. concat은 데이터를 행 또는 열결합 시 사용할 수 있다. 사용방법은 아래 예시와 같이 가능하다.

import pandas as pd

# 두 개의 DataFrame 생성
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2'],
    'B': ['B0', 'B1', 'B2']
})

df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
})

# 행 방향으로 연결 (axis=0)
result = pd.concat([df1, df2])
print(result)


# 결과
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
0  A3  B3
1  A4  B4
2  A5  B5

먼저 df1과 df2에는 A와 B라는 컬럼이 있고 각 컬럼에 3개씩의 값을 가지고 있다. 이를 우리가 흔하게 보는 엑셀과 같은 형태로 보면 아래와 같은 모습을 가진다.

df1   df2
A B A B
A0 B0 A3 B3
A1 B1 A4 B4
A2 B2 A5 B5

이 두 데이터 프레임을 concat이라는 명령어를 통해 결합하면 위의 결과처럼 세로로 결합되는 것을 볼 수 있다. concat의 옵션을 사용해서 가로결합도 가능한데 axis = 1로 주면 가로 결합도 가능하다.

 

아래 옵션을 주어 가로 결합의 결과를 확인해보자. 옵션의 사용법은 아래와 같은 위치에 axis = 1로 주어 가로 결합도 가능한데, 이 경우 결과값을 보면 대부분 원하는 형태의 결합이 아닌 것을 알 수 있다.

result = pd.concat([df1, df2], axis = 1)
print(result)


# 결과
    A   B   A   B
0  A0  B0  A3  B3
1  A1  B1  A4  B4
2  A2  B2  A5  B5

다음과 같이 가로 결합을 원하는 경우는 df2에 있는 컬럼의 정보가 A, B가 아닌 다른 변수명을 가지고 있을 경우일 것이다. 따라서 내가 원하는 정보가 어떻게 결합되는지를 먼저 생각하고 결합함수를 사용해야 한다.

 

그 외 concat의 옵션으로는 ignore_index와 결합방식 형태인 inner와 outer를 정할 수 있는 join이 있다. 참고로 아래에서 설명할 join 명령어와는 다른 내용으로 생각해야 한다. 이 부분은 concat 안에서 사용되는 옵션으로서 join의 내용이다.

 

2. merge

merge는 데이터프레임을 연결할 때 key를 기반으로 연결할 때 유용하다.

df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2'], 'A': ['A0', 'A1', 'A2']})
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K3'], 'B': ['B0', 'B1', 'B3']})

result = pd.merge(df1, df2, on='key', how='inner')
print(result)


# 결과
  key   A   B
0  K0  A0  B0
1  K1  A1  B1

아래 pd.merge 부분을 보면 2개의 데이터프레임명 다음에 on 옵션을 볼 수 있다. on에 있는 key값을 이용하여 두 데이터프레임을 결합할 때 유용하다. 또한 how에는 inner와 outer를 이용하여 결합방법을 결정할 수 있다.

 

3. join

다음은 join 명령어를 이용하여 결합하는 방법이다. join은 merge와 유사하지만 다른점이라면 merge에서는 key를 기준으로 두 데이터프레임을 결합하였고, join에서는 index를 기준으로 결합한다는 특징이 있다.

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2']}, index=['K0', 'K1', 'K2'])
df2 = pd.DataFrame({'B': ['B1', 'B2', 'B3']}, index=['K0', 'K1', 'K2'])

result = df1.join(df2)
print(result)


# 결과
     A   B
K0  A0  B1
K1  A1  B2
K2  A2  B3

결과 형태는 동일하게 나타나는 것을 볼 수 있다.

 

4. append

append는 데이터프레임이나 시리즈를 결합하는데 사용되는 명령어다. concat의 기능 중 행 결합의 간단한 형태의 결합 시 유용하게 사용된다.

df3 = pd.DataFrame({'A': ['A3'], 'B': ['B3']})

result = df1.append(df3)
print(result)


# 결과
    A   B
0  A0  B0
1  A1  B1
2  A2  B2
0  A3  B3

결과를 보면 df3의 데이터가 맨 아래 행으로 결합된 것을 볼 수 있다.

 

5. 각 결합방법의 장단점

728x90

(1) concat

여러 데이터프레임을 유연하게 결합할 수 있으며 axis 옵션으로 행과 열 모두 결합이 가능하다는 장점이 있다. 단점으로는 key를 기준으로 결합 시에는 비효율적이다. 인덱스 재설정 시 추가작업이 필요하다는 단점이 있다.

 

(2) merge

key를 기준으로 결합이 가능하며, 다양한 join 옵션을 제공한다는 장점이 있다. 단점으로는 설정이 조금 복잡할 수 있으며, 동일한 열 이름이 있는 경우 충돌할 수 있는 문제점이 있다.

 

(3) join

인덱스를 기준으로 쉽게 연결이 가능한 장점이 있으나 열 이름이 겹칠 경우 복잡한 경우가 발생할 수 있다. 또한 인덱스를 사용하여 결합해야 한다는 단점이 있다.

 

(4) append

append는 간단한 행 추가 작업에 적합하다는 장점이 있다. 열 결합이 불가능하며 다수의 데이터프레임을 결합하는 경우 비효율적이라는 단점이 있다.

 

각 명령어마다 이러한 장단점이 존재하므로 각각의 특징을 알고 사용하면 훨씬 효율적으로 데이터를 결합할 수 있다.

728x90
반응형

댓글