03-03. 함수내 함수 연속적용 (pipe)
DataFrame.pipe(func, args, kwargs)
개요
pipe 메서드는 함수를 연속적으로 사용할 때 유용한 메서드입니다.
특히 함수가 인수를 사용할 때 pipe 메서드를 사용하면 보다 직관적으로 적용할 수 있습니다
사용법
기본 사용법
df.pipe(func, args, kwargs)
func : 함수입니다.
arg : 함수의 인수입니다.
kwargs : dict 형태의 함수의 인수입니다.
만약 함수 3개가 아래와 같이 있다고 해봅니다.
f1(data, arg1), f2(data, arg1, arg2), f3(data, arg3)
f1 > f2 > f3 순서로 포함되게 함수를 사용한다고 하면 아래와 같이 함수를 사용해야 합니다.
df=f1( f2( f3( data,arg3='c' ),arg2='b1',arg3='b2' ),arg1='a' )
이는 어떤 arg가 어떤함수인지 직관적으로 볼 수 없습니다. 이때, pipe함수를 사용할 수 있습니다.
df=data.pipe(f3, arg3='c').pipe(f2, arg2='b1', arg3='b2').pipe(f3, arg3='c')
예시
먼저 입력 데이터를 정의해보겠습니다.
org_data = pd.DataFrame({'info':['삼성전자/3/70000','SK하이닉스/2/100000']})
print(org_data)
>>
info
0 삼성전자/3/70000
1 SK하이닉스/2/100000
그리고 함수 두개를 만들어보겠습니다.
code_name(data) 는 (종목명/수량/가격)형태인 문자열 data를 입력받아서 각각으로 분리하고 수량과 가격의 dtype을 int로 변경하는 함수 입니다.
def code_name(data):
result=pd.DataFrame(columns=['name','count','price'])
df = pd.DataFrame(list(data['info'].str.split('/'))) # '/ ' 로 구분하여 문자열을 나누어 리스트에 넣음
result['name'] = df[0] # 여기엔 첫번째 값인 이름이 입력
result['count']= df[1] # 여기엔 두번째 값인 수량이 입력
result['price']= df[2] # 여기엔 세번째 값인 가격이 입력
result = result.astype({'count':int,'price':int}) # count와 price를 int로 바꿈(기존str)
return result
print(code_name(org_data))
>>
name count price
0 삼성전자 3 70000
1 SK하이닉스 2 100000
value_cal(data,unit=' ')은 가격과 수량을 곱한다음에 단위로 unit arg를 붙이는 함수입니다.
def value_cal(data,unit=''):
result = pd.DataFrame(columns=['name','value'])
result['name'] =data['name'] # 이름은 기존거를 가져옴
result['value']=data['count']*data['price'] # value는 count * price를 입력함
result = result.astype({'value':str}) # value를 str로 변경(단위를 붙이기 위함)
result['value']=result['value']+unit # 단위를 붙임
return(result)
input=code_name(org_data)
print(value_cal(input,'원'))
>>
name value
0 삼성전자 210000원
1 SK하이닉스 200000원
pipe 메서드를 사용하지 않는경우
만약 pipe메서드를 사용하지 않는다면 아래와같이 함수를 사용해야 합니다.
print(value_cal(code_name(org_data),'원'))
>>
name value
0 삼성전자 210000원
1 SK하이닉스 200000원
pipe메서드를 사용한다면 아래와같이 직관적으로 나타낼 수 있다.
print(org_data.pipe(code_name).pipe(value_cal,'원'))
>>
name value
0 삼성전자 210000원
1 SK하이닉스 200000원
'파이썬완전정복-Pandas DataFrame > 03. 함수의 적용' 카테고리의 다른 글
Pandas DataFrame 03-06. 문자열 형식의 계산식 적용 (eval) (0) | 2022.01.10 |
---|---|
Pandas DataFrame 03-05. 함수연속적용_요소별 (transform) (0) | 2022.01.10 |
Pandas DataFrame 03-04. 함수연속적용_축별 (aggregate, agg) (0) | 2022.01.10 |
Pandas DataFrame 03-02. 요소별 (applymap) (0) | 2022.01.10 |
Pandas DataFrame 03-01. 축 기준 (apply) (0) | 2022.01.10 |