목차
DataFrame.apply()와 DataFrame.map()은 모두 Pandas DataFrame 객체에서 사용되는 메서드입니다. 하지만 사용 목적과 작동 방식에서 차이가 있습니다. 이제 각 측면을 살펴보고 비교해 보겠습니다. 함수의 객체를 보다 직관적으로 표시하기 위해 dataframe.map()을 series.map()이라 표현하겠습니다.
1. 적용대상에서의 비교
apply() 함수는 dataframe 객체, map() 함수는 series 개체를 대상으로 생성된 메서드입니다.
DataFrame.apply(): apply()는 DataFrame의 행 또는 열에 함수를 적용합니다. 기본적으로 각 행 또는 열을 Series로 전달하여 함수를 적용합니다.
Series.map(): map()은 Series 객체에 함수를 적용합니다. 각 요소에 대해 함수를 호출하여 변환합니다.
2. 변환 결과에서의 비교
적용대상의 객체가 dataframe이나 series로 정의되어 있어 반환된 값도 그에 맞게 타입이 결정되어 있습니다.
DataFrame.apply(): apply()는 함수를 적용한 결과를 반환합니다. 반환 값은 Series나 DataFrame일 수 있습니다.
Series.map(): map()은 함수를 적용한 결과를 반환합니다. 반환 값은 Series 객체입니다.
3. 유연성에서의 비교
apply() 함수는 dataframe 객체를 대상으로 정의된 메서드로 map() 함수보다는 더 다양하게 사용될 수 있습니다.
DataFrame.apply(): apply()는 보다 유연한 기능을 제공합니다. 함수에 인자를 전달하거나 사용자 정의 함수를 적용할 수 있습니다. 또한, 축 방향(axis)을 지정하여 행 또는 열에 적용할 수 있습니다.
Series.map(): map()은 단순한 값 변환에 적합합니다. 주로 Series의 각 요소를 다른 값으로 변환할 때 사용됩니다. 사용자 정의 함수를 적용할 수 없으며, 기본적으로 값을 대응시키는 매핑(mapping)을 수행합니다.
4. apply()와 map() 비교 코드
import pandas as pd
# DataFrame 생성
data = {'A': [1, 2, 3, 4, 5], 'B': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
# DataFrame.apply() 예제
# 각 열에 대해 최댓값을 구하는 함수 적용
max_values = df.apply(max)
print(max_values)
# 출력: A 5
# B 50
# dtype: int64
# 각 행에 대해 합계를 구하는 함수 적용
row_sums = df.apply(sum, axis=1)
print(row_sums)
# 출력: 0 11
# 1 22
# 2 33
# 3 44
# 4 55
# dtype: int64
# DataFrame.map() 예제
# 각 값에 대해 제곱을 계산하여 변환
squared_values = df['A'].map(lambda x: x ** 2)
print(squared_values)
# 출력: 0 1
# 1 4
# 2 9
# 3 16
# 4 25
# Name: A, dtype: int64
# 각 값에 대해 문자열로 변환하여 매핑
mapped_values = df['B'].map(str)
print(mapped_values)
# 출력: 0 10
# 1 20
# 2 30
# 3 40
# 4 50
# Name: B, dtype: object
위의 예제에서는 DataFrame.apply()를 사용하여 열의 최댓값과 행의 합계를 계산하였습니다. DataFrame.map()을 사용하여 열 'A'의 값을 제곱하고 열 'B'의 값을 문자열로 변환하였습니다. 이를 통해 apply()와 map()의 차이를 비교할 수 있습니다.
5. 마치며
pandas의 객체에 대한 메서드들인 apply()와 map() 메서드는 그 사용에 있어 유사한 점이 있지만 대상 객체가 다름으로 여러 가지 측면에서 다른 점이 있습니다. 오늘은 그 차이에 대해 설명을 하였고 예제 코드를 통해 어떻게 다른지에 대해 알아보았습니다.