★★★★공부 시작 전 람다함수 이해 ★★★★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'>

+ Recent posts