본문 바로가기

[Pandas] map, apply, applymap 차이점 및 활용

Hub's 2024. 5. 3.

판다스 데이터 변환 ! map, apply, applymap 메서드 활용하기

판다스 라이브러리는 데이터 분석 작업을 효율적으로 수행할 수 있도록 다양한 데이터 변환 메서드를 제공합니다. 판다스의 map, apply, applymap 메서드를 사용하여 데이터 프레임 내의 데이터를 변환하는 방법을 자세히 설명하고, 각 메서드의 차이점을 이해할 수 있도록 하겠습니다. 또한, 각 메서드별로 두 개씩의 예시를 통해 실제 활용 방법을 보여드리겠습니다.

각 매서드의 차이점 

  map apply applymap
적용 시리즈(Series) 시리즈(Series), 데이터 프레임(DataFrame) 데이터 프레임(DataFrame)
없음 행, 열 없음
용도 주로 데이터 매핑 또는 간단한 함수 적용에 사용 복잡한 로직이나 여러 데이터를 참조해야할 때 사용 데이터 프레임의 모든 개별 요소에 대해 동일한 함수를 적용할 때 사용
차이점 시리즈에만 사용가능하며, 다른 두 메서드보다 매핑에 특화되어 있음.  행 또는 열 전체에 대한 복잡한 연산을 수행할 수 있으며, 데이터 프레임의 구조적인 변화를 가지고 올 수 있음. 데이터 프레임 내 모든 요소에 대해 일관적인 변환을 제공하며, 주로 데이터의 포맷을 통일하고자 할때 사용

핵심 차이점

  • map: Series에만 사용 가능하며, 축 기준으로 데이터를 변환하지 않습니다.
  • apply: Series 또는 DataFrame에 사용 가능하며, 행 또는 열 기준으로 데이터를 변환하거나 집계할 수 있습니다.
  • applymap: DataFrame에만 사용 가능하며, DataFrame의 모든 원소에 함수를 직접 적용합니다.

apply vs applymap 헷갈리지 마세요!

apply와 applymap는 특히 혼동을 줄 수 있는데, 간단히 설명하면 다음과 같습니다

  • apply 메서드는 주로 데이터 프레임의 행이나 열 전체에 복잡한 연산을 적용할 때 사용됩니다. 예를 들어, 열 전체에 세금을 추가하거나, 행 전체에서 최대값과 최소값의 차이를 계산하는 것과 같은 작업에 사용됩니다. 이 메서드는 행이나 열 단위로 함수를 적용하므로, 반환되는 결과도 보통 시리즈나 데이터 프레임 형태가 됩니다.
  • applymap 메서드는 데이터 프레임의 모든 개별 요소에 간단한 함수를 적용할 때 사용됩니다. 이는 각 셀의 데이터에 동일한 연산을 적용할 필요가 있을 때 유용하며, 주로 형식을 일관되게 만들거나 모든 숫자를 조정할 때 사용됩니다. 예를 들어, 모든 숫자 값을 백분율로 변환하거나 모든 문자열을 대문자로 변환하는 경우에 적합합니다.

이 두 메서드는 구현 목적과 사용법에 따라 선택되어야 하며, 데이터 프레임의 구조와 필요한 연산의 복잡성에 따라 적절한 메서드를 선택하는 것이 중요합니다. apply는 보다 복잡한 연산과 구조적 변화에, applymap은 간단한 일괄적 변환에 각각 적합합니다.

어떤 함수를 사용해야 할까요?

  • 간단한 함수를 Series에 적용하고 싶다면 map을 사용하세요.
  • 데이터를 행 또는 열 기준으로 변환하거나 집계하고 싶다면 apply를 사용하세요.
  • DataFrame의 모든 원소에 함수를 직접 적용하고 싶다면 applymap을 사용하세요.
import pandas as pd

# 과일 데이터 프레임 생성
data = {
    'Fruit': ['Apple', 'Banana', 'Cherry'],
    'Color': ['Red', 'Yellow', 'Red'],
    'Price': [150, 200, 300]
}
df = pd.DataFrame(data)

1. map 매서드

map 메서드는 시리즈(Series)의 각 요소에 함수를 적용하거나 값의 매핑을 수행합니다. 이 메서드는 주로 시리즈 객체에만 사용됩니다.

map은 시리즈에만 적용 가능하며, 다른 메서드에 비해 매핑과 간단한 데이터 변환에 특화되어 있습니다.

1.1 예시 - 과일 이름을 소문자로 변환하기

# 과일 이름을 소문자로 변환
df['Fruit'] = df['Fruit'].map(lambda x: x.lower())

print(df)
    Fruit   Color  Price
0   apple     Red    150
1  banana  Yellow   200
2  cherry     Red    300

1.2 예시 - 모든 가격에 10%의 세금 추가하기

# 색상 코드 매핑
color_map = {'Red': '#FF0000', 'Yellow': '#FFFF00'}
df['Color Code'] = df['Color'].map(color_map)
print(df)
    Fruit   Color  Price Color Code
0   apple     Red    150    #FF0000
1  banana  Yellow   200    #FFFF00
2  cherry     Red    300    #FF0000

2. apply 매서드

apply 메서드는 데이터 프레임의 행이나 열에 복잡한 함수를 적용할 때 사용됩니다. 이는 데이터 프레임의 구조적 변환을 위해 매우 유연하게 사용할 수 있습니다.

2.1 예시 - 가격에 세금 추가 

# 가격에 10%의 세금을 추가
df['Price with Tax'] = df['Price'].apply(lambda x: x * 1.1)
print(df)
    Fruit   Color  Price  Price with Tax
0   apple     Red    150           165.0
1  banana  Yellow   200           220.0
2  cherry     Red    300           330.0

2.2 예시 - 가격과 색상 코드 정보를 결합

# 가격과 색상 코드를 결합
df['Price and Color'] = df.apply(lambda x: f"{x['Price']} - {x['Color Code']}", axis=1)
print(df)
    Fruit   Color  Price  Price with Tax Price and Color
0   apple     Red    150           165.0   150 - #FF0000
1  banana  Yellow   200           220.0   200 - #FFFF00
2  cherry     Red    300           330.0   300 - #FF0000

3. applymap 매서드 

3.1 예시 - 모든 문자열 요소를 대문자로 변환

# 문자열 요소를 대문자로 변환
df = df.applymap(lambda x: x.upper() if isinstance(x, str) else x)
print(df)
    FRUIT   COLOR  PRICE  PRICE WITH TAX PRICE AND COLOR
0   APPLE     RED    150           165.0   150 - #FF0000
1  BANANA  YELLOW   200           220.0   200 - #FFFF00
2  CHERRY     RED    300           330.0   300 - #FF0000

3.2 예시 - 모든 숫자에 100 곱하기

# 숫자 요소에 100을 곱하기
df = df.applymap(lambda x: x * 100 if isinstance(x, (int, float)) else x)
print(df)
    FRUIT   COLOR  PRICE  PRICE WITH TAX PRICE AND COLOR
0   APPLE     RED  15000         16500.0   15000 - #FF0000
1  BANANA  YELLOW  20000         22000.0   20000 - #FFFF00
2  CHERRY     RED  30000         33000.0   30000 - #FF0000

4. 매서드 차이점 요약

map: 시리즈의 각 요소에 매핑 또는 함수 적용. 주로 단일 열의 값을 변환할 때 사용.
apply: 데이터 프레임의 행 또는 열 전체에 함수 적용. 복잡한 연산이나 여러 열을 참조할 필요가 있을 때 유용.
applymap: 데이터 프레임의 모든 요소에 함수 적용. 데이터의 전체적인 형식을 일관되게 변환하고자 할 때 적합.

 

감사합니다 :)

댓글