반응형
안녕하세요. PSYda입니다.
Series와 DataFrame을 다루다 보면 각각의 열/행 데이터에 함수를 일괄적으로 적용해야 할 때가 있습니다.
이번 포스팅에서는 Series와 DataFrame의 요소에 함수를 적용하는 방법에 대해 알아보겠습니다.
소개할 내용은 아래와 같습니다.
- Series 각각 요소에 함수 일괄 적용(map함수)
- DataFrame의 행, 열 별 함수 일괄 적용(apply함수)
- DataFrame의 요소에 함수 일괄 적용(applymap함수)
8. Series와 DataFrame에 외부 함수 적용하기
- map 함수 : Series에서 사용하며 모든 요소에 함수 일괄 적용
- apply 함수 : DataFrame에서 사용하며 각각의 행 또는 열(Series)에 함수 일괄 적용
- applymap 함수 : DataFrame에서 사용하며 모든 요소에 함수 일괄 적용
8.1 Series의 각각의 요소에 함수 적용하기
map(Function name)
- Series에서 사용가능한 함수
- Series의 모든값(values)에 대해 입력된 함수 일괄 적용
pandas library import
import pandas as pd
from pandas import Series , DataFrame
srAge = Series([10,13,15,23,22,36])
srAge
0 10
1 13
2 15
3 23
4 22
5 36
dtype: int64
나이의 범위에 따라 10대, 20대, 30대로 변경하는 함수 생성
- 10~19 : 10대
- 20~29 : 20대
- 30~39 : 30대
- 그외 : NaN값
으로 변경
def weekday2weeknumber(age):
if age >= 10 and age < 20:
ageRange = '10대'
elif age >= 20 and age < 30:
ageRange = '20대'
elif age >= 30 and age < 40:
ageRange = '30대'
else:
ageRange = pd.np.nan
return ageRange
map 함수로 Series의 각각의 값에 함수 적용
srAgeRange = srAge.map(weekday2weeknumber)
srAgeRange
0 10대
1 10대
2 10대
3 20대
4 20대
5 30대
dtype: object
8.2 DataFrame의 각 열 또는 행에 함수 일괄 적용하기
apply(Function name)
- DataFrame에서 사용 가능한 함수
- DataFrame의 행 또는 열에 해당하는 Series에 함수를 일괄 적용
axis 옵션
- axis = 0(Defualt) : 열기준 함수 적용
- axis = 1 : 행기준 함수 적용
DataFrame 생성
df = DataFrame([[1,3,5],[4,5,6],[7,8,10]])
df
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 3 | 5 |
1 | 4 | 5 | 6 |
2 | 7 | 8 | 10 |
행 또는 열의 최대값과 최소값의 차이를 구하는 함수 생성
def maxMinusMin(sr):
return sr.max() - sr.min()
df.apply(maxMinusMin, axis = 0)
0 6
1 5
2 5
dtype: int64
df.apply(maxMinusMin, axis = 1)
0 4
1 2
2 3
dtype: int64
return값을 조정하여 여러개의 열 또는 컬럼으로 출력 가능
def maxMinusMin2(sr):
sr2 = Series([sr.max(), sr.min(), sr.max()-sr.min()], index = ['최대값','최소값','차이'])
return sr2
df.apply(maxMinusMin2, axis =0)
0 | 1 | 2 | |
---|---|---|---|
최대값 | 7 | 8 | 10 |
최소값 | 1 | 3 | 5 |
차이 | 6 | 5 | 5 |
df.apply(maxMinusMin2, axis =1)
최대값 | 최소값 | 차이 | |
---|---|---|---|
0 | 5 | 1 | 4 |
1 | 6 | 4 | 2 |
2 | 10 | 7 | 3 |
8.3 DataFrmae의 각각 요소에 함수 일괄 적용하기
applymap(Function name)
- DataFrame에서 사용가능한 함수
- DataFrame의 모든값(values)에 대해 함수 일괄 적용
DataFrame 생성
df2 = DataFrame([[1,1,1],[2,2,2],[3,3,3]])
df2
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 1 | 1 |
1 | 2 | 2 | 2 |
2 | 3 | 3 | 3 |
입력값의 제곱을 리턴하는 함수 생성
def square(x):
y = x * x
return y
df2.applymap(square)
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 1 | 1 |
1 | 4 | 4 | 4 |
2 | 9 | 9 | 9 |
위의 Jupyter notebook 내용은 여기 Github에서도 확인 할 수 있습니다.
감사합니다.
반응형
'데이터 분석 > Pandas' 카테고리의 다른 글
[Pandas 기초]10.DataFrame의 집계(그루핑) 함수 (1) | 2019.08.31 |
---|---|
[Pandas 기초]8.Pandas DataFrame의 sort, rank함수 (0) | 2019.08.28 |
[Pandas 기초]7.Pandas DataFrame 통계 (0) | 2019.08.27 |
[Pandas 기초]6.Pandas DataFrame 산술 연산 (2) | 2019.08.22 |
[Pandas 기초]5.Pandas 데이터 파일 입출력 (3) | 2019.08.20 |