[Python] Pandas: 6. apply

Jae Gyeong Lee·2024년 4월 30일

apply

  • DataFrame의 축(row 나 column)에 따라 특정 함수를 적용하고자 할 때 사용
  • for문 사용 없이, DataFrame 축에 따라 모든 row나 column에 특정 함수를 적용할 수 있음
DataFrame.apply(func, axis=0)

func: 적용할 함수명
axis: 함수를 적용할 축(default: 0)

  • column 단위로 함수 적용 시, axis = 0
  • row 단위로 함수 적용 시, axis = 1
import pandas as pd

data_list = [['A', 'Math', '2002-01-05'],
             ['B', 'Computer', '1999-05-21'],
             ['C', 'Communication', '1995-07-07'],
             ['D', 'Language', '2000-12-04'],
             ['E', 'Science', '1994-03-19'],
             ['F', 'Math', '2001-02-08'],
             ['G', 'Communication', '1997-11-10'],
             ['H', 'Computer', '1996-09-02']]
             
df = pd.DataFrame(data_list, columns = ['Name', 'Major', 'Born'])

1. 사용자 정의 함수 적용 (별도 parameter 없는 경우)

def year(value):
	return value.split("-")[0]

# year의 인자(value) = df['Born']
# Born column에 존재하는 data 한 줄 한 줄에 적용(apply)해라, year(함수)를
df['Year'] = df['Born'].apply(year)

df.head(5)
>>>
	Name	Major	Born	Year
0	A	Math	2002-01-05	2002
1	B	Computer	1999-05-21	1999
2	C	Communication	1995-07-07	1995
3	D	Language	2000-12-04	2000
4	E	Science	1994-03-19	1994

2. 사용자 정의 함수 적용 (parameter를 1개 받는 경우)

def age(value, current_year):
    
    born_year = value.split("-")[0]
    age = current_year - int(born_year)
    
    return age

# age의 첫번재 인자(value) = df['Born'], 두번째 인자(current_year) = 2024
# Born column에 존재하는 data 한 줄 한 줄에 적용(apply)해라, age(함수)를
df['Age'] = df['Born'].apply(age, current_year = 2024)

df.head(5)
>>>
	Name	Major	Born	Age
0	A	Math	2002-01-05	22
1	B	Computer	1999-05-21	25
2	C	Communication	1995-07-07	29
3	D	Language	2000-12-04	24
4	E	Science	1994-03-19	30

3. 사용자 정의 함수 적용 (parameter를 2개 이상 받는 경우)

def intro(value, current_year, text):
    
    born_year = value.split("-")[0]
    age = current_year - int(born_year)
    
    result = text + str(age)
    
    return result

# intro의 첫번재 인자(value) = df['Born'], 두번째 인자(current_year) = 2024, 세번째 인자(text) = '안녕 내 나이는 '
# Born column에 존재하는 data 한 줄 한 줄에 적용(apply)해라, intro(함수)를
df['intro'] = df['Born'].apply(intro, current_year=2024, text='안녕 내 나이는 ')

df.head(5)
>>>
	Name	Major	Born	intro
0	A	Math	2002-01-05	안녕 내 나이는 22
1	B	Computer	1999-05-21	안녕 내 나이는 25
2	C	Communication	1995-07-07	안녕 내 나이는 29
3	D	Language	2000-12-04	안녕 내 나이는 24
4	E	Science	1994-03-19	안녕 내 나이는 30

4. DataFrame 내 존재하는 row 정보를 활용하는 경우

def introduce(row, current_year, start, end):
    
    name = row['Name']
    born_year = row['Born'].split("-")[0]
    age = current_year - int(born_year)
    major = row['Major']
    
    result = start + name + str(age) + end + major
    
    return result

# axis = 1 : row에 존재하는 모든 column을 활용
# df에 존재하는 data 한 줄 한 줄(axis=1)에 적용(apply)해라, introduce(함수)를
df['introduce'] = df.apply(introduce, current_year=2024, start='안녕? 내 이름은 ', end='살이고 전공은 ', axis=1)

df.head(5)
>>>
	Name	Major	Born	introduce
0	A	Math	2002-01-05	안녕? 내 이름은 A22살이고 전공은 Math
1	B	Computer	1999-05-21	안녕? 내 이름은 B25살이고 전공은 Computer
2	C	Communication	1995-07-07	안녕? 내 이름은 C29살이고 전공은 Communication
3	D	Language	2000-12-04	안녕? 내 이름은 D24살이고 전공은 Language
4	E	Science	1994-03-19	안녕? 내 이름은 E30살이고 전공은 Science

참고: https://www.youtube.com/watch?v=EHaDMTjCh5s

profile
안녕하세요 반갑습니다. 공부한 내용들을 기록하고 있습니다.

0개의 댓글