Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python Pandas factorize()로 고유값을 정렬한 숫자형 인덱스 배열 출력하기


데이터 분석 과정에서 문자열로 구성된 리스트나 시리즈를 숫자형 인덱스로 변환해야 하는 경우가 종종 있습니다. 예를 들어 다음과 같은 과일 이름 리스트가 있고, 각 고유값에 알파벳순으로 정렬된 숫자형 인덱스를 부여한다고 가정해 보겠습니다.

Sorted distinct values - numeric array index
[2 3 0 3 2 1 4]
['apple' 'kiwi' 'mango' 'orange' 'pomegranate']

이 문제는 pandas의 pd.factorize() 함수를 활용하면 간단하게 해결할 수 있습니다. 아래 단계를 따라 살펴보겠습니다.

해결 방법

1단계: 기본 factorize() 적용

중복 값을 포함한 리스트에 pd.factorize() 함수를 적용한 뒤, 그 결과를 index와 unique_value 두 변수에 저장합니다.

index, unique_value =
pd.factorize(['mango','orange','apple','orange','mango','kiwi','pomegranate'])

이 상태에서 인덱스와 고유값을 출력하면, 값들이 정렬되지 않은 채 리스트에 처음 등장한 순서대로 인코딩된 결과를 확인할 수 있습니다.

2단계: sort=True 옵션 적용

이번에는 pd.factorize() 함수에 sort=True 옵션을 지정하여 실행하고, 결과를 sorted_index와 unique_value에 저장합니다.

sorted_index, unique_value =
pd.factorize(['mango','orange','apple','orange','mango','kiwi','pomegranate'], sort=True)

sort=True가 설정되면 고유값들이 오름차순(알파벳순)으로 정렬되고, 원본 리스트의 각 요소에는 정렬된 순서에 맞는 숫자형 인덱스가 새로 부여됩니다.

3단계: 결과 출력

마지막으로 숫자형 인덱스 배열과 정렬된 고유값을 화면에 출력합니다.

전체 예제 코드

아래 코드를 직접 실행해 보면 동작을 더욱 명확하게 이해할 수 있습니다.

import pandas as pd

# 정렬 없이 factorize 적용
index, unique_value =
pd.factorize(['mango','orange','apple','orange','mango','kiwi','pomegranate'])
print("정렬되지 않은 고유값 - 숫자형 배열 인덱스")
print(index)
print(unique_value)

# sort=True 옵션으로 factorize 적용
print("정렬된 고유값 - 숫자형 배열 인덱스")
sorted_index, unique_value =
pd.factorize(['mango','orange','apple','orange','mango','kiwi','pomegranate'], sort=True)
print(sorted_index)
print(unique_value)

실행 결과

정렬되지 않은 고유값 - 숫자형 배열 인덱스
[0 1 2 1 0 3 4]
['mango' 'orange' 'apple' 'kiwi' 'pomegranate']
정렬된 고유값 - 숫자형 배열 인덱스
[2 3 0 3 2 1 4]
['apple' 'kiwi' 'mango' 'orange' 'pomegranate']

결과 해석

sort=True를 적용하기 전에는 'mango'→0, 'orange'→1, 'apple'→2, 'kiwi'→3, 'pomegranate'→4처럼 데이터에 처음 나타난 순서대로 인덱스가 매겨집니다. 반면 sort=True를 적용하면 고유값이 ['apple', 'kiwi', 'mango', 'orange', 'pomegranate'] 순으로 정렬되고, 원본 리스트의 각 항목은 정렬된 위치에 대응하는 인덱스 [2 3 0 3 2 1 4]로 변환됩니다.

이처럼 pd.factorize()는 범주형 문자열 데이터를 머신러닝 모델의 입력값으로 사용할 수 있는 수치형 코드로 변환할 때 특히 유용합니다. sort=True 옵션 하나만 추가하면 원하는 정렬 순서의 인코딩 결과를 손쉽게 얻을 수 있습니다.