Python/Streamlit
streamlit 데이터 프레임 불러오기 중 레이블/원핫 인코딩 자동으로 하기
mugoori
2022. 12. 26. 14:26
X_new = pd.DataFrame()
for name in X.columns :
print(name)
# 각 컬럼 데이터를 가져온다.
data = X[name]
# 문자열인지 아닌지 나눠서 처리하면 된다.
if data.dtype == object :
# 문자열이니까, 갯수가 2개인지 아닌지 파악해서
# 2개이면 레이블 인코딩 하고,
# 그렇지 않으면 원핫인코딩 하도록 코드 작성
if data.nunique() <= 2 :
# 레이블 인코딩
label_encoder = LabelEncoder()
X_new[name] = label_encoder.fit_transform(data)
else :
# 원핫인코딩
ct = ColumnTransformer( [ ('encoder', OneHotEncoder(), [0] ) ] ,
remainder='passthrough' )
col_names = sorted(data.unique())
X_new[ col_names ] = ct.fit_transform( data.to_frame() )
else :
# 숫자 데이터 처리
X_new[name] = data
# 인코딩의 목적은 데이터 프레임을 불러와서 Kmeans 로 그룹화를 할때
문자열은 넣으면 에러가 나는데 이를 방지하기 위해서이다.
먼저 빈 데이터 프레임을 만든다
그 후 for 반복문을 사용해 각 컬럼 데이터를 가져오게 한다
그 다음 문자열인지 숫자열인지를 구분해 숫자열이면 그대로 출력하고
문자열이면 인코딩을 하게 한다
이때 갯수가 2개 이하이면 레이블 인코딩을
이상이면 원 핫 인코딩을 하게 한다