저번 포스팅에서는 apply 함수가 어떻게 사용되는지 알아보고, DataFrame에서 기존 column을 apply 함수를 활용하는 방법에 대해 배웠습니다.
이번 포스팅에서는 map함수에 대해 알아보고 map 함수는 apply 함수와 어떻게 다른지, 그리고 applymap은 또 어떻게 다른지 알아보겠습니다.
11. map
map 함수는 크게 2가지 기능이 있습니다. apply와 같이 column을 함수를 통해 변경시킬 수 있도 있으며 apply와는 다르게 딕셔너리를 직접 전달해 원하는 값으로 바꾸는 기능이 있습니다. 이와 같은 map 함수의 기능을 차례로 살펴보겠습니다.
1. 함수를 통한 변경
map의 기능을 살펴보기 위해 아래 코드를 실행해 새로운 DataFrame을 만듭니다.
data_list = [{'date' : '1989-08-18'},
{'date' : '2015-12-29'},
{'date' : '1996-08-21'}]
df = pd.DataFrame(data_list, columns=['date'])
apply에 관련하여 포스팅했을때와 마찬가지로 date column에서 year정보만을 구분해 새로운 column을 만드는 함수를 만들고 이를 map함수에 적용해보겠습니다.
먼저 date 정보에서 '-'를 기준으로 split해 year정보를 출력하는 extract_year 함수를 만들어보겠습니다.
def extract_year(date):
return date.split('-')[0]
이제 위에서 만든 extract_year 함수를 map함수에 적용해 DataFrame에 year column을 새로 만들면 다음과 같습니다.
df['year'] = df['date'].map(extract_year)
이 기능은 apply 함수와 같이 특정 column에 값을 하나씩 받아 사용자 정의 함수(또는 내장 함수)를 적용해 새 column을 만들 수 있는 기능입니다.
2. 딕셔너리를 직접 전달해 원하는 값으로 바꾸기
이 기능은 딥러닝에서도 많이 사용되는 기능으로 DataFrame에 있는 정보를 딕셔너리를 전달하여 사용자가 원하는 값으로 바꾸는 기능입니다. 아래 코드를 실행해 DataFrame을 생성한 후 살펴보겠습니다.
job_list = [{'age' : 20, 'job' : 'student'},
{'age' : 32, 'job' : 'developer'},
{'age' : 23, 'job' : 'student'},
{'age' : 35, 'job' : 'teacher'}]
df = pd.DataFrame(job_list, columns=['age', 'job'])
위 코드를 실행하면 age와 job정보가 담겨있는 DataFrame이 만들어지는 것을 알 수 있습니다. 여기서 job column에서 student를 1로, devloper를 2, teacher을 3으로 map 함수를 이용하여 값을 바꿔보겠습니다.
df.job = df.job.map({'student' : 1, 'developer' : 2, 'teacher' : 3 } )
변환정보를 딕셔너리로하여 map함수를 통해 넘겨주면 string이었던 데이터가 숫자로 바뀐 것을 알 수 있습니다.
12. applymap
applymap은 DataFrame의 모든 요소에 함수를 적용하게 하는 함수입니다. 즉 특정 열, 또는 행을 기준으로 함수를 적용하는게 아닌 모든 요소에 대해 함수를 적용하게 합니다. 다음 코드를 실행해 만들어지는 DataFrame을 통해 자세히 확인해보겠습니다.
x_y = [{'x' : 4, 'y' : -1.2, 'z' : 3},
{'x' : 2.4, 'y' : 5.5, 'z' : 2.5},
{'x' : -1.6, 'y' : 4.5, 'z' : -3.3}]
df = pd.DataFrame(x_y)
단순히 실수로 이루어진 이 DataFrame에서 각 요소의 제곱값으로 바뀐 새 DataFrame df_1을 만들어 보겠습니다
df_1 = df.applymap((lambda x : x ** 2))
applymap 함수에 lambda를 이용하여 제곱하게 되면 모든 요소가 제곱되어있는 것을 확인할 수 있습니다. 이 뿐만 아니라 numpy를 import 하여 제곱근을 구하는 함수 sqrt를 df_1에 적용하여 새 DataFrame df_2를 만들어보겠습니다.
import numpy as np
df_2 = df_1.applymap(np.sqrt)
원 데이터인 df에서 제곱되었던 df_1에서 sqrt 함수를 모든 요소에 대하여 적용하므로써 위와같은 결과가 되었음을 알 수 있습니다.
오늘은 map함수에 대해 알아보고 map 함수는 apply 함수와 어떻게 같은 기능을 하는지, 그리고 또 어떤 다른 기능을 하는지 알아봤으며, applymap은 또 어떻게 다른지 알아보았습니다. 다음 포스팅에서는 column 내에서 unique한 값을 찾고 그 개수를 확인하며, 두 DataFrame을 합치는 방법에 대해 알아보겠습니다.
'Study > Python' 카테고리의 다른 글
[Python] 데이터 시각화 - plot,barplot, boxplot (+ matplotlib, plot 한글 설정) (0) | 2021.11.27 |
---|---|
[Python] 데이터 로드 및 전처리 (0) | 2021.10.15 |
[Python]Pandas basic 파이썬 판다스 기초 : apply 활용하기 (0) | 2021.08.18 |
[Python]Pandas basic 파이썬 판다스 기초 : 데이터 그룹 만들기, 중복 데이터 삭제 (0) | 2021.08.12 |
[Python]Pandas basic 파이썬 판다스 기초 : 행,열 생성 및 수정하기 (1) | 2021.07.14 |