군침이 싹 도는 코딩

streamlit 데이터 프레임 불러오기 중 레이블/원핫 인코딩 자동으로 하기 본문

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개 이하이면 레이블 인코딩을

이상이면 원 핫 인코딩을 하게 한다