복붙노트

[PYTHON] 판다 (Pandas) : 카테고리를 숫자로 변환

PYTHON

판다 (Pandas) : 카테고리를 숫자로 변환

다음과 같은 국가와 데이터 프레임이 있다고 가정 해보십시오.

cc | temp
US | 37.0
CA | 12.0
US | 35.0
AU | 20.0

나는 국가들을 'one-hot encodings'로 변환시키는 pd.get_dummies 함수가 있다는 것을 알고있다. 그러나 대신 색인으로 변환하여 cc_index = [1,2,1,3]을 얻으 려합니다.

아래에 표시된 것처럼 numpy where 절과 함께 get_dummies를 사용하는 것보다 빠른 방법이 있다고 가정합니다.

[np.where (x) for df.cc.get_dummies (). values]

이것은 '요인'을 사용하는 R에서 다소 쉽습니다. 그래서 팬더가 비슷한 것을 기대하고 있습니다.

해결법

  1. ==============================

    1.먼저 열의 유형을 변경하십시오.

    먼저 열의 유형을 변경하십시오.

    df.cc = pd.Categorical(df.cc)
    

    이제 데이터는 비슷하게 보이지만 범주별로 저장됩니다. 카테고리 코드를 캡처하려면 :

    df['code'] = df.cc.cat.codes
    

    이제 당신은 :

       cc  temp  code
    0  US  37.0     2
    1  CA  12.0     1
    2  US  35.0     2
    3  AU  20.0     0
    

    DataFrame을 수정하는 대신 코드를 가져 오려면 다음과 같이하십시오.

    df.cc.astype('category').cat.codes
    

    또는 범주 형 열을 인덱스로 사용하십시오.

    df2 = pd.DataFrame(df.temp)
    df2.index = pd.CategoricalIndex(df.cc)
    
  2. ==============================

    2.계열을 정수 식별자로 변환하기를 원하면 pd.factorize를 사용할 수 있습니다.

    계열을 정수 식별자로 변환하기를 원하면 pd.factorize를 사용할 수 있습니다.

    이 솔루션은 pd.Categorical과 달리 사전 순으로 정렬되지 않습니다. 따라서 첫 번째 국가는 0으로 지정됩니다. 1에서 시작하려면 상수를 추가 할 수 있습니다.

    df['code'] = pd.factorize(df['cc'])[0] + 1
    
    print(df)
    
       cc  temp  code
    0  US  37.0     1
    1  CA  12.0     2
    2  US  35.0     1
    3  AU  20.0     3
    

    사전 순으로 정렬하려면 sort = True를 지정하십시오.

    df['code'] = pd.factorize(df['cc'], sort=True)[0] + 1 
    
  3. from https://stackoverflow.com/questions/38088652/pandas-convert-categories-to-numbers by cc-by-sa and MIT license