넘파이(Numpy)에서 if-else 로직을 이용하여 배열(array)에 빠르게 값을 업데이트할 수 있었다.
예를 들어, 아래코드와 같이 넘파이(Numpy) where() 함수를 사용하여 배열(array)을 업데이트한다.
import numpy as np
#Numpy 배열 값
x = np.arraY([1,3,3,6,7,9])
#새로운 값 배열에 넣기
x = np.where((x < 5) | (x > 8), x/2, x)
#새로운 배열 값 보기
array([0.5, 1.5, 1.5, 6. , 7. , 4.5])
If, 기존 배열에 값이 5보다 작거나 8보다 크면, 그 값을 2로 나눈 값을 새로 저장한다.
Else, 나머지는 그대로 둔다.
판다스 데이터 프레임(pandas DataFrame)에서도 판다스(pandas) where() 함수를 사용하여 똑같은 입력을 할 수 있다. 하지만 문법(syntax)은 조금 다르다.
우선, 넘파이(Numpy) where() 함수에 문법을 본다.
x = np.where(condition, value_if_ture, value_if_false)
그리고 다음으로, 판다스(pandas) where() 함수다.
df['col'] = (value_if_false).where(condition, value_if_true)
아래 예시를 보며 판다스(pandas) where() 함수를 사용해 본다.
예시 1: 판다스(pandas) where() 함수
아래 판다스 데이터 프레임(pandas DataFrame)이 있다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({ 'A':[18,22,19,14,14,11,20,28],
'B':[5,7,7,9,12,9,9,4]})
#데이터 프레임
print(df)
A B
0 18 5
1 22 7
2 19 7
3 14 9
4 14 12
5 11 9
6 20 9
7 28 4
판다스(pandas)에서 where() 함수를 사용해서 A 열 값을 변경한다.
# 데이터 프레임 업데이트하기
df['A'] = (df['A'] /2 ).where(df['A'] < 20, df['A'] *2)
# 업데이트 보기
print(df)
A B
0 9.0 5
1 44.0 7
2 9.5 7
3 7.0 9
4 7.0 12
5 5.5 9
6 40.0 9
7 56.0 4
If, 열 A에 값이 20보다 작다면 기존에 값에 x2를 하고 업데이트한다.
Else, 나머지는 /2로 나눈다.
관련 포스팅
'miscellaneous > Python 실행' 카테고리의 다른 글
파이썬에서 기하평균(Geometric Mean) 계산하기 (0) | 2022.09.26 |
---|---|
Numpy: 넘파이(Numpy)에서 최소자승법(least squares method) 실행하기 (0) | 2022.09.22 |
Pandas: 문자열에서 판다스 데이터프레임(pandas DataFrame) 생성하기 (0) | 2022.09.16 |
NumPy: np.linspace 와 np.arange의 차이점 (0) | 2022.09.15 |
Numpy mean() vs average(): 차이점 (0) | 2022.08.29 |