
범주형(categorical) 데이터 전처리 상황에서 많이 사용되는 메서드들임.
종류가 적은 값을 가지는 데이터들을 분석하는데 주로 이용됨.
unique(): 고유값 배열 반환.value_counts(): 고유값과 빈도 를 확인 가능케 함.nunique(): 고유값 개수를 반환.
범주형 데이터에는
예상치 못한 값이 섞여 있을 수 있으므로
반드시 확인 후 Data Cleaning이 필요
0. Create Sample DataFrame (샘플 DataFrame 생성)
import pandas as pd
# DataFrame 생성
data = {
"Name": ["Alice", "Bob", "Charlie", "Alice", "David", "Bob"],
"Gender": ["Female", "Male", "Male", "Female", "Male", "Male"],
"Class": ["1st", "2nd", "3rd", "1st", "*", "2nd"]
}
df = pd.DataFrame(data)
print(df)
# 출력 예시:
#
# Name Gender Class
# 0 Alice Female 1st
# 1 Bob Male 2nd
# 2 Charlie Male 3rd
# 3 Alice Female 1st
# 4 David Male *
# 5 Bob Male 2nd
1. unique() : 고유값 확인
- 중복을 제거한 고유값 배열 반환
- 출력 형식: NumPy 배열(ndarray)
df["Gender"].unique()
# 출력:
#
# array(['Female', 'Male'], dtype=object)
- 어떤 값들이 있는지만 확인할 때 사용
Series 객체에서 지원.
2. value_counts() :고유값과 빈도 확인
- 고유값과 빈도(count) 반환
- 출력 형식: Pandas
Series
df["Gender"].value_counts()
# 출력:
#
# Male 4
# Female 2
# Name: Gender, dtype: int64
- 어떤 고유값이 얼마나 자주 등장하는지 확인 가능.
Pandas 1.1.0 이후, DataFrame.value_counts() 지원
모든 열을 하나의 **tuple(튜플)**로 묶어 고유한 행(row) 조합의 빈도를 반환
3. nunique() : 고유값 개수 확인
- 고유값의 개수 반환
- 출력 형식: 정수 (integer)
df["Gender"].nunique()
# 출력:
#
# 2
- 단순히 개수만 필요할 때 사용
DataFrame객체에 직접 사용할 경우, axis 인자로 행/열 기준을 지정 가능함.
4. Data Cleaning Example
- Class 열에는 원래 1st, 2nd, 3rd만 존재해야 함
- 그러나
*값이 발견됨
df["Class"].value_counts()
# 출력:
#
# 1st 2
# 2nd 2
# 3rd 1
# * 1
# Name: Class, dtype: int64
- 잘못된 카테고리는 전처리 과정에서 제거 또는 보정 필요
- 대표적인 처리 방법: 결측치 처리(missing value handling), 다른 범주로 통합, 머신러닝 기반 대체(예: 클러스터링)
위의 잘못된 Category를 처리하는 간단한 예는 다음과 같음:
import pandas as pd
import numpy as np
# 예시 DataFrame 생성
data = {
"Name": ["Alice", "Bob", "Charlie", "Alice", "David", "Bob"],
"Gender": ["Female", "Male", "Male", "Female", "Male", "Male"],
"Class": ["1st", "2nd", "3rd", "1st", "*", "2nd"]
}
df = pd.DataFrame(data)
# 1. '*' 값을 NaN(결측치)로 변환
df["Class"] = df["Class"].replace("*", np.nan)
print("Step 1: '*' → NaN 변환 후")
print(df, "\n")
# 2. 결측치 처리 방법 (예시)
# (a) 가장 많이 등장하는 값(mode)으로 대체
df_mode_filled = df.copy()
df_mode_filled["Class"].fillna(df_mode_filled["Class"].mode()[0], inplace=True)
print("Step 2a: Mode(최빈값)으로 대체")
print(df_mode_filled, "\n")
# (b) 임의로 'Unknown'이라는 새로운 범주로 대체
df_unknown_filled = df.copy()
df_unknown_filled["Class"].fillna("Unknown", inplace=True)
print("Step 2b: 'Unknown' 범주로 대체")
print(df_unknown_filled, "\n")
# (c) 단순히 결측치 행 제거
df_dropped = df.dropna(subset=["Class"])
print("Step 2c: 결측치 행 제거")
print(df_dropped)
replace("*", np.nan): 잘못된 카테고리의 값을 결측치로 변환fillna(mode()): 최빈값으로 대체fillna("Unknown"): 새로운 범주로 처리dropna(): 결측치 행 삭제
결과는 다음과 같음:
Step 1: '*' → NaN 변환 후
Name Gender Class
0 Alice Female 1st
1 Bob Male 2nd
2 Charlie Male 3rd
3 Alice Female 1st
4 David Male NaN
5 Bob Male 2nd
Step 2a: Mode(최빈값)으로 대체
Name Gender Class
0 Alice Female 1st
1 Bob Male 2nd
2 Charlie Male 3rd
3 Alice Female 1st
4 David Male 1st
5 Bob Male 2nd
Step 2b: 'Unknown' 범주로 대체
Name Gender Class
0 Alice Female 1st
1 Bob Male 2nd
2 Charlie Male 3rd
3 Alice Female 1st
4 David Male Unknown
5 Bob Male 2nd
Step 2c: 결측치 행 제거
Name Gender Class
0 Alice Female 1st
1 Bob Male 2nd
2 Charlie Male 3rd
3 Alice Female 1st
5 Bob Male 2nd
같이보면 좋은 자료들
https://dsaint31.tistory.com/469#1-2.%20Categorical%20data%20(frequency%20data)-1-3
[Math] Type of Data and Scale of Measurement
Type of Data and Scale of Measurement1. Type of Data1-1. Measurement data (quantitative data)Measurement(측정)의 결과로 얻어진 data. 예를 든다면, 스트레스지수, 체중, 하루당 마시는 술의 양 등이 이에 해당한다.Data obtai
dsaint31.tistory.com
2025.05.16 - [Python/pandas] - [ML] pandas.DataFrame 에서 EDA에 적합한 메서드 요약
[ML] pandas.DataFrame 에서 EDA에 적합한 메서드 요약
Pandas DataFrame에서 탐색적 데이터 분석(EDA)에 사용할 수 있는 주요 메서드들은 다음과 같음:2024.05.18 - [분류 전체보기] - [ML] Exploratory Data Analysis (EDA) [ML] Exploratory Data Analysis (EDA)Exploratory Data Analysis (
ds31x.tistory.com
'Python > pandas' 카테고리의 다른 글
| [Pandas] melt() 메서드 (2) | 2025.08.24 |
|---|---|
| [Pandas] missing value 확인: 결측치 확인 (0) | 2025.08.24 |
| [Pandas] stack() 과 unstack() (0) | 2025.08.23 |
| [Pandas] 값 변경하기 - replace (0) | 2025.08.22 |
| [Pandas] Indexer - loc, iloc, at, iat (0) | 2025.08.22 |