파이썬 버전 3.8 기준
pandas 버전 1.1.1 기준
연속적인 함수적용을 위한 pipe() 메서드 |
pandas의 객체에 다른 라이브러리의 함수를 적용하는 방법이 존재한다.
아래의 메서드는 다른 라이브러리의 함수를 적용하는데 사용되는 메서드들이다.
○ 테이블형태로 정리해주는 함수 어플리케이션: pipe()
○ 행 혹은 열로 정리해주는 함수 어플리케이션: apply()
○ 집합 API: agg(), transform()
○ 요소별 적용 함수: applymap()
본 포스팅에서는 pipe() 메서드의 사용법에 대해 다루도록 한다.
pipe() 메서드 |
pipe()메서드는 pandas 객체에 함수를 적용하게 해주는 메서드이다.
함수에 pandas 객체를 입력해도 된다.
하지만 pipe() 메서드를 사용하면 pandas 객체에 여러 개의 함수를 동시에 적용할 때 더 깔끔하고 보기 좋게 만들 수 있다.
○ 즉, 함수를 연속적으로 호출해야하는 경우에 pipe()메서드를 사용하는 것이 권장된다.
○ pipe() 메서드는 메서드를 연속적으로 사용할 수 있게 함으로써 라이브러리 함수를 사용하기 쉽게 만들어준다.
pipe() 메서드의 적용방식은 아래와 같다.
메서드 사용 형식)
result=object.pipe(func, *args, **kwargs)
각 입력 객체별 설명은 다음과 같다.
○ func: 이 입력변수는 pandas 객체에 적용할 함수를 입력받는다.
○ *args: func에 입력되는 위치 입력변수를 입력받는다.
▷ iterable한 자료형을 입력받는다. (list, tuple 등)
○ **kwargs: func에 입력되는 키워드 입력변수를 입력받는다.
▷ 키워드에 입력될 입력값의 mapping을 입력받는다.
pipe() 메서드 적용 예제 |
예제를 수행하기 위해 다음과 같이 셋업을 수행한다.
○ 아래에서 작성한 함수들은 DataFrame을 입력과 출력으로 가지는 함수들이다.
모듈의 임폴트 및 예제에 사용할 함수의 정의)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제 함수의 정의
In[4]: def extract_info(data):
...: dummy=pd.DataFrame(list(data['name_score'].str.split(',')))
...: data['name'] = dummy[0]
...: data['score'] = dummy[1]
...: return data
...:
In[5]: def add_class(data, classname='NoClass'):
...: data['name_with_class'] = data['name'] + '_' + classname
...: return data
...:
pipe() 메서드 적용 예제
그리고 아래의 예제는 2가지 방법을 통해 함수를 적용한 예제이다.
○ 첫번째 방법: 일반적인 방법으로의 함수 적용
○ 두번째 방법: pipe메서드를 사용한 연속적인 함수 적용.
pandas는 여기서 두번째 스타일을 사용하는 것을 권장한다. 그리고 이는 메서드 체이닝(method chaining)으로 알려져있다.
pipe() 메서드는 메서드를 연속적으로 사용할 수 있게 함으로써 라이브러리 함수를 사용하기 쉽게 만들어준다.
pandas 객체로의 함수 적용 예제)
# 예제용 DataFrame 정의
In[6]: sample_df = pd.DataFrame({'name_score': ['Younghee, 100', 'Chuulsoo, 040'] } )
In[7]: sample_df
name_score name score
0 Younghee, 100 Younghee 100
1 Chuulsoo, 040 Chuulsoo 040
# ex1-1: 일반적인 방법으로 함수 적용
In[8]: add_class(extract_info(sample_df), classname= 'sun')
Out[8]:
name_score name score name_with_class
0 Younghee, 100 Younghee 100 Younghee_sun
1 Chuulsoo, 040 Chuulsoo 040 Chuulsoo_sun
# ex1-2: pipe 메서드를 활용한 함수 적용
In[9]: sample_df = pd.DataFrame({'name_score': ['Younghee, 100', 'Chuulsoo, 040'] } )
In[10]: sample_df.pipe(extract_info).pipe(add_class, ['sun'])
Out[10]:
name_score name score name_with_class
0 Younghee, 100 Younghee 100 Younghee_sun
1 Chuulsoo, 040 Chuulsoo 040 Chuulsoo_sun
함수의 키워드 입력변수 활용
위의 예제에선 적용되는 함수의 위치입력변수를 통하여 함수를 적용하였다.
아래 예제는 적용되는 함수의 키워드 입력변수를 입력받아 함수를 적용하는 것을 보여준다.
키워드 입력변수의 활용)
# 예제용 DataFrame의 정의
In[11]: sample_df = pd.DataFrame({'name_score': ['Younghee, 100', 'Chuulsoo, 040'] } )
# ex2: 키워드 입력변수를 통한 함수 입력 예제
In[12]: sample_df.pipe(extract_info).pipe(add_class, classname= 'good')
Out[12]:
name_score name score name_with_class
0 Younghee, 100 Younghee 100 Younghee_good
1 Chuulsoo, 040 Chuulsoo 040 Chuulsoo_good
선택적 입력변수 활용
함수의 입력변수에 튜플과 같은 자료형을 활용하면 커스터마이징된 결과를 출력할 수 있다.
선택적 입력변수 적용)
# 예제용 DataFrame의 정의
In[13]: sample_df = pd.DataFrame({'name_score': ['Younghee, 100', 'Chuulsoo, 040'] } )
# ex3: 튜플을 활용한 선택적 입력변수 적용 예제
In[14]: sample_df.pipe(extract_info).pipe(add_class, ('good','sun'))
Out[14]:
name_score name score name_with_class
0 Younghee, 100 Younghee 100 Younghee_good
1 Chuulsoo, 040 Chuulsoo 040 Chuulsoo_sun
적용하려는 함수의 위치가 첫번째가 아닌 경우
위에서는 pipe() 메서드에 입력되는 함수의 첫번째 위치에 적용되는 pandas 객체가 입력으로 들어가는 경우에 대해 다뤘다.
만약 pandas객체가 함수의 두 번째 입력으로 사용하는 경우는 어떻게 할까?
이 경우에는 pipe() 함수에 (callable, data_keyword)과 같이 튜플을 사용하면된다.
○ 여기서 callable은 함수를 의미하며, data_keyword는 pandas객체가 입력될 키워드변수명을 의미한다.
pipe() 메서드는 DataFrame을 튜플에 지정된 입력에 따라 pandas객체를 입력한다.
적용하려는 함수의 위치가 첫번째가 아닌 경우의 예)
# 예제용 함수의 정의
In[15]: def add_class(classname='NoClass', data=pd.DataFrame()):
...: data['name_with_class'] = data['name'] + '_' + classname
...: return data
...:
In[16]: sample_df.pipe(extract_info).pipe((add_class, 'data'), 'good')
Out[16]:
name_score name score name_with_class
0 Younghee, 100 Younghee 100 Younghee_good
1 Chuulsoo, 040 Chuulsoo 040 Chuulsoo_good
.pipe() 메서드 세부사항 |
이 메서드는 pandas 객체에 함수를 적용할 수 있게 해주는 메서드이며, 연속적으로 함수를 사용할 시 유용하다.
DataFrame.pipe(func, *args, **kwargs) |
func: function
pipe() 메서드가 Series/DataFrame에 적용되는 함수를 입력받는다.
입력된 함수 func에는 *args나 **kwargs에 입력된 변수를 입력받아 역할을 수행한다.
Function to apply to the Series/DataFrame. args, and kwargs are passed into func. Alternatively a (callable, data_keyword) tuple where data_keyword is a string indicating the keyword of callable that expects the Series/DataFrame.
args: iterable, optional
func에 입력될 위치 입력변수를 입력받는다.
kwargs: mapping, optional
func에 입력될 키워드 입력변수의 매핑을 입력받는다.
|
|
|
| 참고자료 https://pandas.pydata.org/docs/user_guide/basics.html https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.pipe.html |
|
|
|
|
'Python > Pandas' 카테고리의 다른 글
다수(여러개)의 함수 사용을 위한 agg() 메서드-pandas(33) (0) | 2020.10.08 |
---|---|
행과 열로의 함수 적용을 위한 apply() 메서드-pandas(32) (0) | 2020.10.07 |
인덱스(레이블) 수정을 위한 rename() 메서드-pandas(30) (0) | 2020.09.13 |
두 객체의 데이터 정렬을 위한 align() 메서드 - pandas(29) (0) | 2020.09.11 |
인덱스 정렬(순서 변경)을 위한 reindex() 메서드- pandas(28) (0) | 2020.09.08 |
댓글