Pandas `pd.cut()` 함수 사용법

Ryan·2025년 2월 5일

Python/Pandas

목록 보기
15/23

Pandas pd.cut() 함수

데이터 분석에서 연속형 변수를 범주형 변수로 변환해야 할 때 pd.cut()을 사용하면 효과적입니다. pd.cut()은 데이터를 특정 구간으로 나누고 각 구간에 해당하는 값을 할당하는 기능을 합니다. 이 글에서는 pd.cut()의 주요 기능과 사용법을 정리합니다.

1. pd.cut()의 기본 개념

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3,
           include_lowest=False, duplicates='raise', ordered=True)

✅ 주요 매개변수 설명

  • x : 변환할 데이터 (배열, 시리즈 등)
  • bins : 데이터를 나눌 경계 값 (리스트 또는 정수 값)
  • right : 구간의 오른쪽 경계를 포함할지 여부 (True 기본값)
  • labels : 각 구간에 적용할 레이블 지정
  • include_lowest : 가장 작은 경계를 포함할지 여부 (False 기본값)
  • duplicates : 중복되는 bin 경계값을 허용할지 설정
  • ordered : 레이블이 순서를 유지해야 하는지 여부 (True 기본값)

2. bins 매개변수: 데이터 구간 나누기

1️⃣ 정수 입력으로 자동 구간 나누기

import pandas as pd
import numpy as np

data = np.array([1, 7, 5, 4, 6, 3, 8, 9, 2])
binned_data = pd.cut(data, bins=3)
print(binned_data)

출력:

[(0.992, 4.0], (4.0, 7.0], (4.0, 7.0], (0.992, 4.0], (4.0, 7.0], ...]
  • bins=3을 입력하면 최솟값과 최댓값을 기준으로 3개의 구간을 자동 설정합니다.
  • 각 값이 어떤 구간에 속하는지 확인할 수 있습니다.

2️⃣ 명시적인 리스트로 구간 설정

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
binned_data = pd.cut(data, bins=[1, 5, 10])
print(binned_data)

출력:

[(1, 5], (1, 5], (1, 5], (1, 5], (1, 5], (5, 10], (5, 10], (5, 10], (5, 10]]
  • [1, 5, 10]을 입력하면 15, 510의 두 개 구간으로 나뉩니다.

3. right 매개변수: 구간 경계 포함 여부

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
binned_data = pd.cut(data, bins=[1, 5, 10], right=False)
print(binned_data)

출력:

[[1, 5), [1, 5), [1, 5), [1, 5), [5, 10), [5, 10), [5, 10), [5, 10), [5, 10)]
  • right=False를 설정하면 구간이 [1,5), [5,10)처럼 오른쪽 값이 포함되지 않음을 알 수 있습니다.
  • 기본값은 True로 설정되어 있어 (1,5] 형태로 오른쪽 경계를 포함합니다.

4. labels 매개변수: 범주 이름 지정하기

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
binned_data = pd.cut(data, bins=[1, 5, 10], labels=['Low', 'High'])
print(binned_data)

출력:

['Low', 'Low', 'Low', 'Low', 'Low', 'High', 'High', 'High', 'High']
  • 각 구간에 대해 ‘Low’, ‘High’라는 레이블을 부여할 수 있습니다.

5. include_lowest 매개변수: 최솟값 포함하기

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
binned_data = pd.cut(data, bins=[1, 5, 10], include_lowest=True)
print(binned_data)
  • 기본적으로 bins의 왼쪽 값은 포함되지 않지만, include_lowest=True를 설정하면 최솟값을 포함합니다.

6. duplicates 매개변수: 중복된 bin 값 허용 여부

binned_data = pd.cut([1, 2, 3, 4, 5], bins=[1, 3, 3, 5], duplicates='drop')
print(binned_data)
  • 중복된 경계값(3,3)이 있을 경우 기본적으로 오류가 발생하지만, duplicates='drop'을 설정하면 중복된 구간을 제거하고 실행할 수 있습니다.

🔥 정리

매개변수설명
bins데이터를 나눌 기준 (정수 또는 리스트)
right오른쪽 끝 값을 포함할지 여부 (True 기본값)
labels각 구간에 대한 범주형 레이블 설정
include_lowest가장 작은 값 포함 여부 (False 기본값)
duplicates중복된 구간 값 허용 여부 ('raise' 기본값, 오류 발생)
ordered레이블이 순서를 유지해야 하는지 (True 기본값)

📌 마무리

pd.cut()은 연속형 데이터를 범주형 데이터로 변환할 때 유용한 기능입니다. 특히 머신러닝에서 데이터를 특정 구간으로 나누어 분류 모델을 학습할 때 활용할 수 있습니다.

0개의 댓글