본문으로 건너뛰기
김신건의 로그

[Pandas] mode / factorize

· 수정 · 📖 약 1분 · 221자/단어 #python #pandas #mode #factorize #encoding
Pandas mode / factorize, Pandas mode, Pandas factorize, 최빈값 pandas

정의

  • mode() : 가장 빈번한 값 (최빈값) 반환
  • factorize() : 고유값을 정수 코드로 변환 (label encoding)

mode

s.mode()                    # Series 반환 (동률이면 여러 개)
df.mode()                   # 각 컬럼의 mode (DataFrame)
df.mode(axis=1)             # 각 행의 mode
python
import pandas as pd
s = pd.Series(['A','B','A','C','B','A','B'])
print(s.mode())
print('---')
print(s.mode().iloc[0])
결과
0    A
1    B
Name: count, dtype: object
---
A

A, B 둘 다 3 번 → 동률이라 둘 다 반환. .iloc[0] 으로 첫 번째만 흔히 사용.

DataFrame.mode

python
import pandas as pd
df = pd.DataFrame({
  'city': ['Seoul','Busan','Seoul'],
  'plan': ['pro','basic','pro'],
})
print(df.mode())
결과
    city plan
0  Seoul  pro

각 컬럼별로 mode. 동률이 있는 컬럼은 여러 행, 없는 셀은 NaN 으로 정렬.

groupby + mode

df.groupby('city')['plan'].agg(lambda x: x.mode().iloc[0])
# 각 city 의 가장 흔한 plan

factorize

codes, uniques = pd.factorize(s)
python
import pandas as pd
s = pd.Series(['Seoul','Busan','Seoul','Daegu','Busan'])
codes, uniques = pd.factorize(s)
print('codes  :', codes)
print('uniques:', uniques)
결과
codes  : [0 1 0 2 1]
uniques: Index(['Seoul', 'Busan', 'Daegu'], dtype='object')

문자열을 정수로 매핑. 머신러닝의 label encoding.

sort 옵션

pd.factorize(s, sort=True)
# 정렬된 unique 기준 (알파벳/숫자 순)

na_sentinel

pd.factorize(s, use_na_sentinel=True)
# NaN → -1 (default)

category vs factorize

  • s.astype('category') : pandas 의 category dtype, 메모리 / 정렬 / category 보존
  • pd.factorize(s) : 단순 정수 변환, 데이터 분석에서 직접 다룸

ML 라이브러리 (sklearn) 와 연동할 때 factorize 가 더 직관적인 경우도 있음.

sklearn 의 LabelEncoder 와의 비교

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['city_code'] = le.fit_transform(df['city'])
# 같은 동작이지만 sklearn 객체 (transform 일관성)

factorize 가 가볍고, LabelEncoder 가 inverse_transform 등 추가 메서드 제공.

함정

1. mode 가 여러 값을 반환

s.mode()                  # 가장 흔한 값(들) 의 Series
s.mode()[0]               # 일관성 있게 하나만 (구 idx)
s.mode().iloc[0]          # 명시적 위치 (권장)

2. factorize 의 NaN

codes, uniques = pd.factorize(s)
# NaN 은 -1 코드, uniques 에는 안 들어감

참고

이 글의 용어 (4개)
[Pandas] Categoricalpandas
정의 Categorical 은 제한된 고유값 만 가질 수 있는 dtype. 내부적으로 정수 코드로 저장되어 메모리 절약 과 속도 향상. 사용 <CodeWithOutput lang…
[Pandas] drop_duplicates / duplicatedpandas
정의 - : 각 행이 중복인지 boolean Series 반환 - : 중복 행 제거 후 DataFrame 반환 와는 다르다. 그건 Series 의 고유값 추출, 이건 행 단위 처…
[Pandas] get_dummies / from_dummiespandas
정의 는 범주형 컬럼을 원-핫 인코딩 (one-hot encoding). ML 전처리의 가장 흔한 단계. 기본 <CodeWithOutput language="python" out…
[Pandas] value_countspandas
정의 는 각 고유값의 등장 빈도 를 내림차순 Series 로 반환. SQL 의 . pandas 1.1+ 부터는 도 가능 (여러 컬럼 조합). 기본 <CodeWithOutput l…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기