[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.먼저 열의 유형을 변경하십시오.
먼저 열의 유형을 변경하십시오.
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.계열을 정수 식별자로 변환하기를 원하면 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
from https://stackoverflow.com/questions/38088652/pandas-convert-categories-to-numbers by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] ImportError : 'encodings'라는 모듈이 없습니다. (0) | 2018.10.14 |
---|---|
[PYTHON] 파이썬 csv.reader : 어떻게하면 파일의 맨 위로 되돌아 갈 수 있습니까? (0) | 2018.10.14 |
[PYTHON] 어떻게 파이썬 스크립트를 Windows에서 실행 가능하게 만드시겠습니까? [복제] (0) | 2018.10.14 |
[PYTHON] 파이썬에서 키 누르기를 감지합니까? (0) | 2018.10.14 |
[PYTHON] 이미지에서 녹색 색상 객체 만 감지하는 임계 값을 정의하는 방법 : Opencv [duplicate] (0) | 2018.10.14 |