판다스 데이터프레임에서 열 값 매핑 방법

이번 포스팅에서는 판다스 데이터프레임에서 열 값 매핑 방법에 대해서 알아보겠습니다. 열 값 매핑이란 열의 특정 값을 다른 값으로 대체하는 것을 의미하며, 일반적으로 데이터 정리 및 변환에 사용됩니다. 열 값 매핑이 유용한 사례는 많이 있습니다. 다음은 몇 가지 일반적인 사용 사례입니다.

  1. 열의 특정 문자열 값을 숫자에 매핑합니다.
    예를 들어, “Male”과 “Female”을 각각 0과 1에 매핑하여 머신 러닝 알고리즘에서 학습과 예측을 용이하게 합니다.
  2. 약어를 전체 이름으로 대체합니다.
    예를 들어, “USA”와 “UK”를 “United States”와 “United Kingdom”으로 대체하여 데이터를 더 읽기 쉽게 만듭니다.
  3. 철자가 틀린 단어를 올바른 철자로 대체하여 수정합니다.
    예를 들어, “Cocacola”를 “Coca-Cola”로 대체하여 통계 및 분석에서 오류를 방지합니다.


map() 함수 활용

map() 함수는 가장 간단하고 직접적인 방법입니다. 예를 들어, 다음 사례에서 성별 값을 0과 1로 매핑합니다.

import pandas as pd

# 매핑 전
mapDf = pd.DataFrame({
    "name": ["Alice", "Bob", "Charlie", "David", "Eva", "Frank"],
    "sex": ["female", "male", "male", "male", "female", "male"],
    "age": [23, 34, 29, 42, 25, 31],
})

mapDf

<매핑 전>


<매핑 후>


Factorize Mapping

map 함수를 사용하여 열 값을 매핑하는 것이 가장 간단한 방법입니다. 그러나 열에 여러 개의 고유한 값이 있는 경우 하나씩 매핑하는 것은 번거로울 수 있습니다. 예를 들어, 다음 예의 grade 열의 경우 두 개의 값만 있는 sex 열과 달리 가능한 값이 더 많습니다.

이 경우에는 인수분해 방법을 사용하여 매핑을 수행할 수 있습니다.

import pandas as pd

# 매핑 전
fatorizeDf = pd.DataFrame({
    "name": ["John", "Emily", "Michael", "Sarah", "James", "Olivia"],
    "sex": ["male", "female", "male", "female", "male", "female"],
    "grade": ["A", "B", "C", "A", "B", "C"],
})

fatorizeDf

fatorizeDf.sex = fatorizeDf.sex.factorize()[0]
fatorizeDf.grade = fatorizeDf.grade.factorize()[0]

# 매핑 후
fatorizeDf

factorize 함수는 두 개의 요소가 있는 튜플을 반환합니다. 첫 번째 요소는 매핑된 값을 나타내는 숫자 배열이고, 두 번째 요소는 인덱스 유형으로, 인덱스 값은 열의 고유한 값에 해당합니다.

fatorizeDf.grade.factorize()

---------------------------------------------------------------------------------

(array([0, 1, 2, 0, 1, 2], dtype=int64), Int64Index([0, 1, 2], dtype='int64'))

따라서 코드는 factorize()[0]을 사용합니다.

‘grade’ 열의 경우 매핑 후 값을 이진화하려면 서로 다른 수준을 나타내는 네 가지 값이 있습니다. 실패(F)와 통과(P)의 두 가지 범주만 원하는 경우 코드는 다음과 같습니다.

fatorizeDf.grade = fatorizeDf.grade.factorize()[0]
fatorizeDf.grade = (fatorizeDf.grade == 2).astype("int")
fatorizeDf

A와 B는 0에 매핑되고, C는 1에 매핑됩니다.

이상으로 판다스 데이터프레임에서 열 값 매핑 방법에 대해서 알아보았습니다.


답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다