본문 바로가기
Python/Pandas

Map(), Apply(), ApplyMap() 함수 사용 방법

by 찐남 2022. 6. 11.

이번 포스팅에서는

map(), apply() 및 applymap()을

사용하는 방법과

언제 어떤 함수를

사용해야 하는지에 대해 알아보겠습니다.

 

이러한 함수는 DataFrame 열에

어떤 처리를 적용하고,

값을 업데이트하거나

새 열을 만들 수 있습니다.

 

세 가지 방법과 DataFrame, Series의 관계

이 세 가지 방법과 

DataFrame, Series의 관계는 

다음과 같이 구성됩니다.

  Data Frame Series
map   O
apply O O
applymap O  

 

 

map() 함수 사용 방법

map은 

일부 규칙 또는 입력 대응에 따라 

일부 Series의 값을 매핑합니다.

 

전달되면

딕셔너리 또는 Series 요소는

딕셔너리 또는 Series의 key를

기반으로 매핑됩니다.

 

누락된 값은 NaN으로 변환됩니다.

map()은 Series의 요소별 접근입니다. 

 

예제를 위해 데이터를 생성하겠습니다.

 

import pandas as pd

df = pd.DataFrame({
    "name": ["철수", "영희", "진수", "형진", "순정", "정미"],
    "score": [55, 77, 100, 95, 80, 89],
    "sex": ["M", "F", "M", "M", "F", "F"],
})

df

 

딕셔너리를 사용하여

성별을 고려한 모든 사람에게

인사 멘트를 추가해 보겠습니다.

예를 들어, 

성별이 'M'인 경우 Mr. 를 사용하고,

성별이 'F'인 경우 Ms를 사용합니다.


이러한 목표를 달성하기 위해 

매핑이 정의된 딕셔너리를

아래와 같이 지정합니다.

 

딕셔너리에서 일부 값을

찾을 수 없으면 NaN으로 변환됩니다.

 

df["인사말"] = df["sex"].map({"M": "Hello, Mr.", "F": "Hello, Ms."})
df

 

Series를 사용하여 닉네임 열을

추가하겠습니다.

 

닉네임에 대한 Series를 정의하고,

'name' 열을 인덱스로 지정하고,

map()에서 이 Series를 사용해야 합니다.

nickName = pd.Series(['CS', 'YH', 'JS', 'HJ', 'SJ', 'JM'], index=df["name"])
df["nickName"] = df["name"].map(nickName)
df

 

함수를 정의하여 "grade" 열 추가하기

map() 메서드에서 함수 또는 

람다 식을 사용하여 

열을 다른 열에 매핑할 수 있습니다.

 

# score에 대응하는 grade를 맵핑하기 위한 함수 정의
def grade(score):
    num = float(score)
    if num < 60.0:
        return "D"
    if num < 80.0:
        return "C"
    if num < 90.0:
        return "B"
    else:
        return "A"

df["grade"] = df["score"].map(grade)
df

 

간단한 매핑을 위해

람다 식을 사용할 수 있습니다.

 

df["인사하기"] = df["name"].map(lambda x: f"안녕, {x}!")
df

 

 

 

apply() 함수 사용 방법

apply는 

DataFrame에 사용할 수 있습니다. 

 

DataFrame의 축을 따라

함수를 적용하는 데 사용됩니다.


apply()도 요소별로 작동하지만 

복잡한 연산 및 집계에 더 적합합니다. 

예를 들어 name과 sex 열에 따라

인사말 메시지를 받을 수 있습니다.


  ● DataFrame df의 apply() 메서드 사용
  ● 람다 또는 함수를 지정할 수 있으며,

     람다 식을 사용할 때 행은

     전체 행 데이터가 됩니다.
  ● 여러 열에 따라 열을 가져올 때는

      axis=1을 지정하세요.

 

df["첫인사말"] = df.apply(lambda row: f"Welcome, {'Mr.' if row['sex'] == 'M' else 'Ms.'} {row['name']}", axis=1)
df

 

apply() 메서드는 Series에도 

적용할 수 있습니다.

 

def excellentYn(score):
    num = float(score)
    if num > 90.0:
        return "Excellent"
    else:
        return ""

df["excellent"] = df["score"].apply(excellentYn)
df

 

applymap() 함수 사용 방법

마지막으로 applymap 함수에 대해

알아보겠습니다.

이 함수는 DataFrame의 모든 요소에

스칼라를 허용하고 반환합니다.

 

DataFrame에만 적용할 수 있고, 
가끔 apply() 함수보다 빠릅니다.

예를 들어 "인사말"과 "첫인사말" 열을

대문자로 변환할 수 있습니다.

 

df[["인사말", "첫인사말"]] = df[["인사말", "첫인사말"]].applymap(lambda x: x.upper())
df

 

결론

apply() 함수는 여러 열 또는 행에

복잡한 처리를 적용하는 데 사용됩니다.

하나의 열 또는 여러 열: axis = 1

하나의 행 또는 여러 행: axis = 0


applymap() 함수는

전체 DataFrame에 대한

요소별 연산에 사용됩니다.


apply() 함수는 Series의 값에

복잡한 처리를 적용하는 데 사용됩니다.


map() 메서드는 Series의 각 값을 

일부 규칙이나 대응에 따라 

다른 값으로 매핑하는 데 사용됩니다.

 

 

반응형

댓글