[Pandas] mode / factorize
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
---
AA, 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…
💬 댓글