1️⃣ object vs category 차이
| 구분 | object | category |
| 저장 형태 | 문자열 그대로 저장 | 문자열을 코드(숫자)로 치환 |
| 메모리 사용량 | 많음 | 훨씬 적음 (중복값 많을수록 효과 큼) |
| 연산 방식 | 문자열 직접 비교 | 정수 비교 (빠름) |
| 데이터 의미 | 자유 텍스트 | 범주형 값(카테고리, 그룹) |
| 예시 | “서울”, “부산”, “서울” | {서울:0, 부산:1} |
2️⃣ 카테고리(category) 타입의 장점
① 메모리 절약
- 문자열 중복값은 한 번만 저장하고, 각 행은 숫자 코드로 참조함
- 데이터셋이 클수록 메모리 사용량이 크게 줄어듦
→ object 대비 10~100배까지 절약 가능
② 연산 속도 향상
- 비교·정렬·그룹화(groupby, value_counts) 시 문자열 대신 정수 비교
- Pandas가 내부적으로 C 언어로 만들어져 있어서, category 타입이 훨씬 빠르게 동작하기 때문에 연산 속도 향상
③ 시각화/모델링 시 편리
- 범주형 변수를 자동으로 인식해서
→ pd.get_dummies()나 sklearn의 인코딩 단계에서 처리 쉬움 - 그래프(plotly, seaborn 등)에서 정렬된 카테고리 순서를 지정할 수도 있음
3️⃣ 언제 category로 바꾸면 좋은가
✅ 좋은 경우
- 지역명, 성별, 상품코드, 국가명처럼 중복되는 문자열이 많을 때
- 그룹화(groupby), 피벗, 집계 연산을 자주 할 때
❌ 비추천
- 거의 모든 값이 고유한 문자열일 때 (예: 사용자 이름, 주문번호)
→ category로 바꿔도 메모리 이득이 거의 없고 변환 오버헤드만 생김
| 상황 | 권장 여부 | 이유 |
| 중복값이 많은 문자열 열 (예: 지역명, 국가명, 성별 등) | ✅ 적극 권장 | 메모리 절약 + 연산 효율 |
| 열의 고유값(unique 값)이 적음 (예: 10개 이하) | ✅ | category 변환 시 이득 큼 |
| 분류 모델에서 명목형 피처로 사용될 경우 | ✅ | 인코딩 용이 |
| 텍스트 내용이 다양하고 고유값이 대부분인 경우 (예: 사용자 이름, 댓글 내용) | ❌ | 변환 이점 거의 없음 |
| 숫자형이지만 범주를 의미하는 코드형 열 (예: 0=남, 1=여) | ✅ | 의미 명확, 시각화 편리 |
