4.10.1 배열 결합 기술 (Concatenate): 조립식 기차와 쌓이는 아파트

데이터 분석을 하다 보면 여러 곳에서 수집된 파편화된 데이터 조각들을 하나로 이어 붙여야 할 때가 아주 많습니다. 예를 들어, 어제 수집한 날씨 데이터 리스트와 오늘 수집한 날씨 데이터 리스트를 하나의 큰 데이터셋으로 결합(Concat)하는 작업입니다.

파이썬 Numpy에서는 이러한 구조적 결합 작업을 파이프라인처럼 직관적으로 처리하기 위해 두 가지 강력한 시각적 비유를 제공합니다. 바로 “기차 칸 연결하기”“아파트 층수 올리기”입니다.


[1단계] 아파트와 기차 재료 (배열) 준비하기

본격적인 결합에 앞서, 결합의 재료가 될 배열들을 준비합니다. 각 결합 방식이 요구하는 축의 길이(행 개수 또는 열 개수)가 일치해야 함을 기억하세요.

1단계 배열 준비

import numpy as np

# [수평 결합용] 위아래 높이(행)가 똑같이 2층인 기차 화물칸 준비
A = np.array([[1, 2], 
              [3, 4]])
B = np.array([[5, 6], 
              [7, 8]])

# [수직 결합용] 가로 폭(열)이 똑같이 3칸 구역인 아파트 모듈 준비
C = np.array([[1, 2, 3]])
D = np.array([[4, 5, 6]])

print("기차칸 A:\n", A)
print("기차칸 B:\n", B)
print("1층 기초 공사 C:\n", C)
print("크레인으로 얹어질 2층 모듈 D:\n", D)

[실행 결과]

기차칸 A:
 [[1 2]
  [3 4]]
기차칸 B:
 [[5 6]
  [7 8]]
1층 기초 공사 C:
 [[1 2 3]]
크레인으로 얹어질 2층 모듈 D:
 [[4 5 6]]

(참고) 여기서 기차칸 A와 B는 높이(행)가 2로 동일하고, 아파트 C와 D는 너비(열)가 3으로 동일합니다.


[2단계] 옆으로 길게 결합하기: 수평 결합 (hstack)

바닥에 놓인 두 개의 데이터 블록을 조립식 장난감 기차의 화물칸처럼 옆으로 나란히(수평으로) 이어 붙입니다. 파이썬에서는 Horizontal(수평)의 앞 글자를 딴 np.hstack() 함수를 사용합니다.

hstack 애니메이션

핵심 룰: 두 화물칸의 위아래 높이(행의 개수)가 완벽하게 똑같아야 이음매가 흔들림 없이 연결될 수 있습니다.

# [2단계] hstack으로 수평(Horizontal) 결합! 
# 주의!: 두 개의 배열을 튜플 괄호로 포장((A, B))하여 넘겨야 합니다.
train = np.hstack((A, B))

print("🚀 hstack 결합으로 쭈욱 길어진 기차:\n", train)

[실행 결과]

🚀 hstack 결합으로 쭈욱 길어진 기차:
 [[1 2 5 6]
  [3 4 7 8]]

결과물을 보면 원래 2x2 사이즈였던 정사각형 블록들이 옆구리 쪽으로 단단하게 합쳐져 2x4 형태의 긴 직사각형 기차가 되었습니다.


[3단계] 위아래로 쌓아 올리기: 수직 결합 (vstack)

이번에는 데이터를 지하에서부터 옥상까지 수직(위아래)으로 차곡차곡 쌓아 올립니다. 마치 건물 위로 조립식 모듈을 올리는 타워크레인과 같습니다. Vertical(수직)의 앞 글자를 딴 np.vstack() 함수가 역할을 수행합니다.

vstack 애니메이션

핵심 룰: 쌓이는 건물의 가로 폭 부분(열의 개수)이 서로 정확히 똑같아야 무너지지 않고 결합될 수 있습니다.

# [3단계] vstack으로 수직(Vertical) 결합! 
# 위아래로 차곡차곡 건물을 올려 2층짜리 다세대 주택을 만듭니다.
apartment = np.vstack((C, D))

print("🏢 vstack 결합을 통해 완성된 번듯한 2층 아파트:\n", apartment)

[실행 결과]

🏢 vstack 결합을 통해 완성된 번듯한 2층 아파트:
 [[1 2 3]
  [4 5 6]]

원래 1x3 크기였던 판상형 데이터가 수직으로 병합되며 2x3 형태의 번듯한 2층 아파트 행렬로 완성되었습니다!


[주의사항] 결합 박스(Tuple) 포장 까먹지 않기 (TypeError)

초보자가 결합 함수를 사용할 때 가장 흔하게 겪는 에러는 전달 인자를 튜플 형태 ( )로 묶어서 보내지 않는 것입니다.

튜플 포장 주의사항 애니메이션

try:
    # 에러 발생! A와 B를 독립적인 두 매개변수로 던지면 오류가 납니다.
    np.hstack(A, B)
except TypeError as e:
    print("❌ 에러 발생 (TypeError):", e)

[실행 결과]

❌ 에러 발생 (TypeError): hstack() takes 1 positional argument but 2 were given

꿀팁: 결합할 배열의 갯수가 몇 개든 하나로 묶어서 보내주기 위해 **항상 이중 괄호 np.hstack((A, B, C)) 처럼 튜플 자료형 구조로 포장 박스에 담아 전달하는 것을 잊지 마세요!

서브목차