[Python] pd.where과 np.where의 차이
업데이트:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[1,2,3,4,5], 'b':[10,20,30,40,50]})
df
a | b | |
---|---|---|
0 | 1 | 10 |
1 | 2 | 20 |
2 | 3 | 30 |
3 | 4 | 40 |
4 | 5 | 50 |
1. 판다스의 Series객체.where()
함수
이 함수는 Series객체1.where(Series객체에 대한 조건문, 거짓 값에 대한 대체 값)
의 형태로 사용한다.
조건문의 참값에 대해서는 Series1객체의 값을 넣어준다.
df['a'].where(df['a'] < 3, 10)
0 1
1 2
2 10
3 10
4 10
Name: a, dtype: int64
a열 중 3보다 작은 값(1,2)에는 그대로 a열의 값, 3이상인 값에 대해서는 10을 넣는다.
df['b'].where(df['a'] < 3, 100)
0 10
1 20
2 100
3 100
4 100
Name: b, dtype: int64
a열 중 3보다 작은 값(1,2)에는 b열의 값, 3이상인 값에 대해서는 100을 넣는다.
2. 넘파이의 np.where()
함수
이 함수는 np.where(배열에 대한 조건문, 참일때 값, 거짓일때 값)
의 형태로 사용하며 배열(array)로 반환한다.
위의 판다스 where함수를 똑같이 재현해보자.
np.where(df['a'] < 3, df['a'],10)
array([ 1, 2, 10, 10, 10], dtype=int64)
이는 조건문에 대해 참일때와 거짓일때를 조금 더 자유롭고 유연하게 구현할 수 있는 장점이 있는 것 같다.
df['where_a'] = np.where(df['a'] < 3, '3미만','3이상')
df['where_b'] = np.where(df['b'].isin([10, 30]), 'O', 'X')
df
a | b | where_a | where_b | |
---|---|---|---|---|
0 | 1 | 10 | 3미만 | O |
1 | 2 | 20 | 3미만 | X |
2 | 3 | 30 | 3이상 | O |
3 | 4 | 40 | 3이상 | X |
4 | 5 | 50 | 3이상 | X |
댓글남기기