본문 바로가기

Pandas/응용

판다스 - apply, applymap, pipe(응용2)

반응형
INPUT USE RETURN
시리즈 원소 apply 단일 값, 시리즈
시리즈 객체 (데이터프레임의 행 or 열) 단일 값, 시리즈, 데이터프레임(통합)
데이터프레임의 원소 applymap (동일한 형태의)데이터프레임
데이터프레임 객체 pipe 단일 값, 시리즈, 데이터프레임

 

 

 

데이터 불러오기

 

 

 

데이터 살펴보기

 

총 891행, 15열

 

컬럼의 자료형도 확인할 수 있다.

 

 

이전 응용1 글에선 apply와 pipe의 결과가 동일한 함수를 보았다.

 

이번엔 조금 다른 함수를 보자.

 

 

 

 

 

이전 함수를 이용하기에 이전 함수에 대한 코드와 결과를 첨부한다.

 

apply의 결과와 동일하다.

 

 

 

 

함수 생성 및 결과 확인

 

 

size 속성은 시리즈의 행 개수를 셀 때 이용한다.

 

데이터프레임에 이용하면 모든 데이터의 수를 센다. 

(행 x 열)

 

 

이제 하나씩 뜯어보자

 

 

apply는 하나의 컬럼, 즉 시리즈를 받는다.

 

이전 함수에서 survived의 결과는 0 이었다.

 

survived의 size를 구하기 위해 

 

dem_survived의 변수를 이용해 구했다.

 

당연히 행의 개수가 나오며 이는 891로 리턴되었다.

 

0 나누기 891은 0이다.

 

 

 

 

그렇다면 0 이아닌 age컬럼을 보면 어떨까?

 

이전 함수에서 age컬럼의 빈 값은 177개였다.

 

age컬럼의 행의 개수는 여전히 891개다.

 

177 나누기 891은 0.1986으로 나온다.

 

 

이 처럼 한 컬럼씩 값이 나오고 

 

이 값들을 연결해 시리즈로 나타낸 것이 apply다.

 

아래는 최종 결과다.

 

 

 

 

 

count_missing 처럼 pipe도 결과가 같을까?

 

같지 않다.

 

하나씩 뜯어보자.

 

 

함수에서 바뀐 것은 d_frame의 파라미터 뿐이다.

 

여기서 다른 것은 pipe는 데이터프레임 객체를 받는다는 것이다.

 

df.size를 하면 한 컬럼의 행의 개수가 아니라

 

행 * 열의 값이 나온다.

 

891 * 15 = 13365이다.

 

 

 

sum_까지는 apply와 결과가 비슷하지만

 

시리즈(sum_)와 스칼라(13365)의 연산을 한 브로드캐스팅의 결과는 다음과 같다.

 

 

apply일땐 행별로 값을 891로 나눴지만

 

지금은 13365로 나눈다.

 

그래서 결과가 달라진 것이다.

 

잘 나온 것을 볼 수 있다.

 

 

이처럼 apply와 pipe는 리턴의 형태가 같을 순 있지만

 

pipe는 데이터프레임의 객체를 받으므로 유의해서 사용해야할 것이다.

 

 

* 참고 : 두 함수 모두 applymap을 이용하면 오류 발생

(데이터프레임을 리턴해야 하므로)

반응형

'Pandas > 응용' 카테고리의 다른 글

판다스 - groupby  (0) 2020.06.22
판다스 - apply, applymap, pipe(응용3)  (0) 2020.06.22
판다스 - apply, applymap, pipe(응용1)  (0) 2020.06.21
판다스 - apply, applymap, pipe(2)  (0) 2020.06.20
판다스 - apply, applymap, pipe(1)  (2) 2020.06.20