★★★★공부 시작 전 람다함수 이해 ★★★★ : https://amatoroi.tistory.com/8
판다스 데이터프레임과 Lambda 함수의 이해와 사용법
람다(lambda) 함수의 활용은 많은 python 개발자나 pandas 이용자들이 입을 모아 하는 말이다. 손 쉽게 적용할 수 있다고 한다. 나같은 초심자의 입장에서는 도무지 알 수가 없다. 아니, 이해는 되는데
amatoroi.tistory.com
함수 매핑: 시리즈 또는 데이터프레임의 개별 원소를 특정 함수에 일대일 대응시키는 과정
여기서 배울 것:
- 데이터 프레임에 함수를 매핑하는 방법
- 데이터를 집계하는 그룹 연산
- 데이터프레임을 합치거나 다양한 형태로 구조를 변경하는 방법
함수 매핑은 사용자가 직접 만든 함수를 적용할 수 있기 때문 판다스 기본 함수로 처리하기 어려 복잡한 연산을 데이터프레임 등의 판다스 객체 적용시킬 수 있는 장점 보유 !
1 - 1 : 개별 원소에 함수 매핑
- 시리즈 원소에 함수 매핑
시리즈 객체 apply() 메소드를 적용하면 인자로 전달하는 매핑 함수에 시리즈의 모든 원소를 하나씩 입력하 함수의 리턴값을 돌려 받는다. 시리즈 원소의 개수만큼 리턴값을 받아서 같은 크기 시리즈 객체로 반환한다.
import seaborn as sns
# titanic 데이터셋에서 age,fare 2개 열을 선택하여 데이터 프레임만들기
titanic = sns.load_dataset('titanic')
df = titanic.loc[:,['age','fare']]
df['ten'] = 10
print(df.head())
age fare ten
0 22.0 7.2500 10
1 38.0 71.2833 10
2 26.0 7.9250 10
3 35.0 53.1000 10
4 35.0 8.0500 10
사용자 함수를 정의함.
def add_10(n): # n에 10을 더하는것
return n + 10
def add_two_obj(a, b): # a + b의 값을 return
return a + b
print(add_10(10))
print(add_two_obj(10, 10))
20
20
apply() : 데이터프레임의 개별원소에 함수를 적용할 때 사용 !!!!!
sr1 = df['age'].apply(add_10) # n = df['age']의 모든 원소들
print(sr1.head())
print('\n')
# 시리즈 객체와 숫자에 적용 : 2개의 인수 ( 시리즈 + 숫자 )
sr2 = df['age'].apply(add_two_obj, b=10) # a = df['age']의 모든 원소들, b=10
print(sr2.head())
print('\n')
# lambda 함수 활용 : 시리즈 객체 적용
sr3 = df['age'].apply(lambda x : add_10(x)) # x = df['age']
print(sr3.head())
0 32.0
1 48.0
2 36.0
3 45.0
4 45.0
Name: age, dtype: float64
0 32.0
1 48.0
2 36.0
3 45.0
4 45.0
Name: age, dtype: float64
0 32.0
1 48.0
2 36.0
3 45.0
4 45.0
Name: age, dtype: float64
- 데이터프레임 원소에 매핑
데이터프레의 개별 원소에 매핑하려면 applymap()을 써야한다!!!
a = df.applymap(add_10) # 시리즈와 다르게 간편하게 df.apply~~ 로 바로 사용가능!
print(a)
age fare ten
0 32.0 17.2500 20
1 48.0 81.2833 20
2 36.0 17.9250 20
3 45.0 63.1000 20
4 45.0 18.0500 20
1 - 2 : 시리즈 객에 함수 매핑
- 데이터프레의 각 열에 함수 매핑
데이터프레임에 apply(axis=0) 메소드를 적용하면 모든 열을 하나씩 분리해 매핑 함수의 인자로 각 열(시리즈)이 전달됨.
(axis=0은 각 열의 모든 행에 대해서 동작), axis=1은 그 반대
매핑 함수에 따라 반환되는 객체의 종류가 달라짐 ( 시리즈 or 데이터프레임)
ex) 시리즈를 입력받고 시리즈를 반환하는 함수를 매핑하, 데이터프레임을 반환한다.
아래 예제를 통해 이해해보자.
참고) isnull() = 누락데이터 불리안 형태로 반환하는 함수
import seaborn as sns
titanic = sns.load_dataset('titanic')
df = titanic.loc[:,["age","fare"]]
# 사용자 함수 정의
def missing_value(series):
return series.isnull()
# 데이터프레임의 각 열을 인자로 전달하면 데이터프레임을 반환
result = df.apply(missing_value, axis = 0)
print(result.head())
print('\n')
print(type(result))
age fare
0 False False
1 False False
2 False False
3 False False
4 False False
<class 'pandas.core.frame.DataFrame'>