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
반응형