Pandas
함수 매핑
김천종
2022. 11. 9. 18:29
반응형
시리즈, 데이터 프레임의 값, 열, 행, 데이터프레임 전체에 함수를 일대일로 대응시켜서 연산을 수행할 수 있다.
1
2
3
4
5
|
### 함수 매핑 ###
# 데이터 프레임의 원소에 특정 함수를 일대일로 대응시킨다.
# 판다스 기본 함수로 처리하기 힘든 연산을
# 데이터프레임에 적용하는 것이 가능하다.
# apply() 메소드 사용 #
|
cs |
## 원소에 함수 매핑 ##
# 시리즈 원소에 함수 매핑 #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
## 원소에 함수 매핑 ##
# 시리즈 원소에 함수 매핑 #
titanic = sns.load_dataset('titanic') # seaborn 라이브러리
df = titanic.loc[:, ['age', 'fare']] # titanic 데이터셋 사용
df['ten'] = 10 # 계산을 위한 열(시리즈) 추가
print(df.head())
'''
age fare ten
0 22.0 7.2500 10
1 38.0 71.2833 10
2 26.0 7.9250 10
3 35.0 53.1000 10
4 35.0 8.0500 10
'''
def add_10(n):
return n + 10
def add_a_b(a, b):
return a + b
# 사용할 사용자 정의 함수
df['add_10'] = df['ten'].apply(add_10)
# df['ten']의 개별 원소에 add_10() 함수 적용하고 새로운 열로 추가
# add_10(n) 매개변수n = df['ten']의 원소
df['add_a_b'] = df['ten'].apply(add_a_b, b = 10)
# df['ten']의 개별 원소에 add_a_b() 함수 적용하고 새로운 열로 추가
# add_a_b(a, b) 매개변수 a = df['ten']의 원소, b = 10 으로 지정
print(df.head())
'''
age fare ten add_10 add_a_b
0 22.0 7.2500 10 20 20
1 38.0 71.2833 10 20 20
2 26.0 7.9250 10 20 20
3 35.0 53.1000 10 20 20
4 35.0 8.0500 10 20 20
'''
# 람다 형식 사용 #
use_lambda = df['age'].apply(lambda x : add_10(x))
# lambda 매개변수 : 반환 식
# lanbda 형식도 apply를 이용해서 시리즈의 원소에 대응 가능
print(use_lambda)
'''
0 32.0
1 48.0
2 36.0
3 45.0
4 45.0
...
886 37.0
887 29.0
888 NaN
889 36.0
890 42.0
Name: age, Length: 891, dtype: float64
'''
|
cs |
# 데이터프레임 원소에 함수 매핑 #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
# 데이터프레임 원소에 함수 매핑 #
# 데이터프레임 원소 전체에 함수를 적용한다.
# 동일한 형태의 데이터프레임이 만들어진다.
# applymap() 메소드 사용 #
df_map = df.applymap(add_10)
# df 데이터프레임의 원소에 add_10을 적용시키고 df_map 데이터프레임에 저장
print(df_map.head())
'''
age fare ten add_10 add_a_b
0 32.0 17.2500 20 30 30
1 48.0 81.2833 20 30 30
2 36.0 17.9250 20 30 30
3 45.0 63.1000 20 30 30
4 45.0 18.0500 20 30 30
'''
# 앞에서 출력한 df 에서 10을 추가한 결과
|
cs |
## 시리즈 객체에 함수 매핑 ##
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
## 시리즈 객체에 함수 매핑 ##
# 데이터프레임 각 열에 함수 매핑 #
# apply(axis = 0) 사용 #
def missing_value(series):
return series.isnull()
# 매개변수로 시리즈를 입력받고 불린 시리즈로 반환하는 함수
result = df.apply(missing_value, axis = 0)
print(result.head())
'''
age fare ten add_10 add_a_b
0 False False False False False
1 False False False False False
2 False False False False False
3 False False False False False
4 False False False False False
'''
# 데이터프레임 각 행에 함수 매핑 #
# apply(axis = 1) 사용 #
def add_two(a, b):
return a + b
df['add'] = df.apply(lambda x: add_two(x['age'], x['ten']), axis = 1)
# 'age'열과 'ten'열의 원소를 행방향으로 더하고 'add' 열에 추가
print(df['add'].head())
'''
0 32.0
1 48.0
2 36.0
3 45.0
4 45.0
Name: add, dtype: float64'''
|
cs |
## 데이터프레임 객체에 함수 매핑##
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
## 데이터프레임 객체에 함수 매핑 ##
# pipe() 메소드 사용 #
def missing_value(x):
return x.isnull()
# NaN 찾는 함수, 데이터프레임 반환
resul_df = df.pipe(missing_value)
print(resul_df.head(3))
'''
age fare ten add_10 add_a_b add
0 False False False False False False
1 False False False False False False
2 False False False False False False
'''
def missing_count(x):
return missing_value(x).sum()
# 각 열의 NaN 개수 반환하는 함수, 시리즈 반환
resul_df2 = df.pipe(missing_count)
print(resul_df2.head(3))
'''
age 177
fare 0
ten 0
dtype: int64
'''
def total_number_missing(x):
return missing_count(x).sum()
# 총 NaN 개수 반환하는 함수, 값 반환
resul_df3 = df.pipe(total_number_missing)
print(resul_df3)
'''
354
'''
|
cs |
반응형