[29일차]DataFrame심화 - DataFrame과 Series 각 데이터 함수적용(apply)

김준석·2024년 1월 4일

데이터 가져오기

import pandas as pd

customers = pd.read_csv('marketing_campaign.csv', sep='\t', index_col='ID')
customers

고객 나이 계산 후 새로운 컬럼 만들기

아래의 사진을 보면 업데이트는 2021년8월23일 기준으로 되었다.

즉, 2021에서 탄생년도를 빼면 나이가 나온다.

# 나이 계산 - 데이터셋이 2021.08.23임
2021-customers['Year_Birth']

이를 insert 메소드로 새로운 컬럼 추가.

customers.insert(loc=1, column='Age', value= 2021-customers['Year_Birth'])

아동,청소년 등 나이에 맞게 구분을 지어보자. - apply()

구분나이 범위설명
아동0세부터 만 12세까지0세부터 12세까지의 나이를 아동으로 분류.
청소년만 13세부터 만 19세까지13세부터 19세까지의 나이를 청소년으로 분류.
청년만 20세부터 39세까지20세부터 39세까지의 나이를 청년으로 분류. 청년은 취업, 결혼, 주택 구입 등의 중요한 이벤트가 발생하는 시기입니다.
중년만 40세부터 64세까지40세부터 64세까지의 나이를 중년으로 분류. 중년은 청년기 이후의 성숙한 시기로 여겨지며, 가정을 이루고 가족을 양육하는 등의 책임을 맡을 때입니다.
노년만 65세 이상65세 이상의 나이를 노년으로 분류. 노년은 고령자로 여겨지며, 사회적 보호와 건강 관리 등에 대한 관심이 증가합니다.

구분은 위의 표와 같다.

이를 함수를 통해 구분지어보자.

def classify_age(age):
    if age >=0 and age <= 12:
        return 'Child'
    elif age>= 13 and age <= 19:
        return 'Teenager'
    elif age>=20 and age <= 39:
        return 'Young Adult'
    elif age>=40 and age<=64:
        return 'Middle-aged'
    elif age>=65:
        return 'Elderly'
    else:
        return 'Invalid age'

(age)에 나이가 들어가면 구분을 해주는 함수이다.

이제 customers 데이터 프레임의 Age 컬럼을 함수 인자에 넣어주자.

.apply() 메소드

특정 함수를 시리즈 형태로 하나하나 실행시켜주는 메소드

customers['Age'].apply(classify_age)

Age 컬럼의 데이터를 하나하나 classify_age 인자 값에 넣어준다.

이를 컬럼에 추가해 주자

customers['Age_Group'] = customers['Age'].apply(classify_age)

이렇게 하면 맨 마지막 컬럼에 저장이 되는 것은 이제 사진을 보지 않아도 알 수 있다.

이렇게 컬럼을 추가 했을때 다시 재배치하는 방법을 알아보자.

데이터를 빼낸 뒤 다시 삽입.

.pop() 메소드는 컬럼을 빼오는 기능을 가지고 있다.

data = customers.pop('Age_Group') #컬럼을 빼오고
customers.insert(2, 'Age_Group',data) # insert로 넣어준다.
customers

그럼 Age 컬럼 옆으로 Age_Group 이 추가된 것을 확인할 수 있다.


.apply()로 여러 컬럼을 읽어오기.

육류, 어류에 대한 지출금액을 합산해보자.

소비량 정보가 있는 컬럼만 가져와보자.

나는 iloc. 을 이용하여 가져왔다.

customers.iloc[:,10:16]

육류 소비 데이터 MntMeatProducts 컬럼

어류 소비 데이터 MntFishProducts 컬럼의 합계를 구해주는 함수를 만들어보았다.

 def total_meat_fish(row):
    meat = row['MntMeatProducts']
    fish = row['MntFishProducts']
    return sum(meat,fish)

이제 이걸 apply 로 연산해주자.

customers.apply(total_meat_fish)

오잉!? 오류가 뜬다…!!!

확인해보니 기본적으로 컬럼을 기준으로 더하기 때문에

axis = index로 바꿔주어 컬럼과 컬럼을 연산할 수 있게 해줘야 된다.

customers.apply(total_meat_fish, axis=1)

이 데이터를 Income (수익)컬럼 옆에 둬서

육류와 어류 소비량에 대한 수익을 눈으로 보기 쉽게 해보자.

customers.insert(6,'meat+fish',customers.apply(total_meat_fish, axis=1))


**.apply(lambda_func)**

lambda를 이용해서 컬럼을 추가해보자.

원화를 볼 수 있는 컬럼을 가져와 보자.

1달러에 1312원이라고 가정했을 때

Income * 1312 = 원화일 것 이다.

# 2023-12-09 기준 1달러 == 1312원
customers['Income']*1312 # 계산

customers.insert(loc=6, column='Income_kr', value=customers['Income']*1312) #계산값 컬럼

0개의 댓글