판다스의 apply() 메서드의 기본 문법은 다음과 같다.

 

apply() 메서드는 pandas 객체에 열 혹은 행에 대해 함수를 적용하게 해주는 메서드이다.

 

DataFrame.apply(func,axis=0,raw=False,result_type=None,args=(),**kwds)

 

*func: 이 입력변수는 pandas 객체의 열이나 행에 적용할 함수를 입력받는다.

*axis:함수를 적용할 축을 지정한다.

 -Series에 적용할 경우에는 axis를 따로 지정해주지 않는다.

 -0 or 'index' 

  example) DataFrame.apply(func,axis=0),  DataFrame.apply(func,axis='index')

  :함수를 각 열(columns)에 따라 적용한다.

 -1 or 'index'

  example) 위와 동일

  :함수를 각 행(row)에 따라 적용한다.

*agrs: func에 입력되는 위치 입력변수를 입력받는다. 즉, iterable한 자료형을 입력받는다. (list,tuple등)

*kwds: func에 입력되는 키워드 입력변수를 입력받는다. ->키워드에 입력될 입력값의 mapping을 입력받는다.

 

 

우선 데이터프레임을 간단하게 만들어보자.

 

import pandas as pd
import numpy as np

df=pd.DataFrame([[4,9]]*3,columns=['A','B'])
df

 

df.apply(np.sqrt)

 

위 코드처럼 단순히 apply()메서드에 func를 지정하면 각 Series로 처리가 된다. 즉 Series에서도 셀 당 처리를 해준다.

 

df.apply(np.sum,axis=0)

A    12
B    27
dtype: int64

axis=0으로 지정해 주었을 경우, 위 정의처럼 각 column에 따라 적용한다. 

그러므로, A 와 B column에 대하여 전체 합을 처리해준다.

 

df.apply(np.sum,axis=1)

0    13
1    13
2    13
dtype: int64

axis=1로 지정해 주었을 경우, 위 정의처럼 각 row에 따라 적용한다.

그러므로 index별로 전체 합을 처리해준다.

 

lambda 함수를 적용한 응용 apply()

다음 예를 확인해보자.

 

df.apply(lambda x: [1,2],axis=1)

0    [1, 2]
1    [1, 2]
2    [1, 2]
dtype: object

위 코드를 살펴보면 lambda함수를 사용해 [1,2] 리스트 형식을 axis=1이라는 조건을 통해 각 row에 적용시킨다.

그러면 위 결과와 같이 Series의 결과를 얻게 된다.

 

df.apply(lambda x:[1,2],axis=1,result_type='expand')

위 코드를 살펴보면 lambda함수를 사용해 [1,2]의 리스트를, axis=1이라는 조건을 통해 각 row에 적용 시키는데, 위 예제와 다른점은 result_type='expand' 조건을 추가 적용했다. 

result_type = 'expand'를 전달하면 목록과 유사한 결과가 데이터 프레임의 열로 확장된다.

그러므로 column_name은 0과 1(default)로 지정되고 각 data만 expand(확장)된것을 확인할 수 있다.

 

df.apply(lambda x:pd.Series([1,2],index=['foo','bar']),axis=1)

위 코드를 살펴보면 lambda함수를 통해 각 [1,2]로 되어있는 시리즈를 생성하고, index=['foo','bar']을 지정해준다. 추가로 axis=1을 지정해 줌으로써 각 row에 적용시키는데 위와 같은 결과를 얻을 수 있다.

df.apply(lambda x:[1,2],axis=1,result_type='broadcast')

위 코드를 살펴보면 lambda 함수를 통해 리스트형식인 [1,2]를, axis=1을 지정해줌으로써, 각 row에 삽입해준다.

추가로 result_type = 'broadcast'를 전달하면 함수가 목록 형이든 스칼라이든 상관없이 동일한 모양 결과를 보장하고 축을 따라 브로드 캐스트한다. 결과 열 이름은 원본이된다.

 

*result_type이란 앞서 조건이라고 말했지만 명확히 정의하자면 매개변수(parameter)이다.

{'expand','reduce','broadcast','None'} 종류가 있으며 axis=1 즉, row에만 적용 가능하다. 

'Data analysis > Pandas' 카테고리의 다른 글

[Pandas] DataFrame  (0) 2021.01.15
[Pandas] Series  (0) 2021.01.15
[Pandas] DataFrame 특정 칼럼 혹은 인덱스 선택  (0) 2021.01.13
[Pandas] DataFrame(개념)  (0) 2021.01.13

+ Recent posts