파이썬 버전 3.7 기준
pandas 버전 0.25.1 기준
where 및 mask 메서드 옵션, 설명, 사용 예 |
본 포스팅에서는 where메서드에 대한 설명과 이를 응용한 인덱싱에 대해 설명한다.
where 메서드 |
where 메서드는 특정 조건에 맞는 데이터들을 선택하여 출력하는데 사용될 수 있다.
○ 이 메서드는 조건식을 입력받는데, 조건식에 True에 해당하는 데이터들을 출력한다.
○ 이 메서드는 적용되는 Series나 DataFrame의 형상과 일치하는 데이터를 출력한다.
where() 메서드 사용형식)
Series.where(cond, other=None, inplace=False, axis=None)
DataFrame.where(cond, other=None, inplace=False, axis=None)
참고사항(대괄호[조건식] 대신 where 메서드간의 다른 점)
Series에서 적용 시
○ 대괄호[조건식]은 조건식이 True가 되는 결과만 출력한다.
○ where 메서드는 조건식이 False이 되면 other에 입력된 값을 출력하거나 NaN을 출력하여 기존 배열과 형상을 맞춘다.
○ 즉, 기존 배열과 형상을 똑같이 유지할 필요가 있을 경우에는 where를 아니면 대괄호[조건식]을 사용하면 된다.
DataFrame에서 적용 시
○ 조건식의 결과가 False일 때 대괄호[조건식]은 NaN값을 넣고 DataFrame을 출력한다.
○ 조건식의 결과가 False일 때 where 메서드는 기본값으로 NaN값 넣고 DataFrame을 출력하지만, other변수에 값을 입력함으로써 사용자가 원하는 값이 넣어진 DataFrame을 출력할 수 있다.
참고사항
numpy에서의 where 함수와 pandas에서의 where 메서드는 약간 사용법이 다르니 사용에 주의하자.
where 메서드 사용 예제 |
다음 예제는 Series에서의 where 메서드에 대한 다양한 적용 예이다.
Series에서의 where 메서드 사용 예)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제용 배열 선언
In[4]: ex_s=pd.Series(np.arange(6),index=['r'+str(x) for x in range(6)], dtype="int32")
# 대괄호[조건식]
In[5]: ex_s[ex_s>3]
Out[5]:
r4 4
r5 5
dtype: int32
# where 메서드
In[6]: ex_s.where(ex_s>3)
Out[6]:
r0 NaN
r1 NaN
r2 NaN
r3 NaN
r4 4.0
r5 5.0
dtype: float64
# where 메서드(other 입력변수 사용)
In[7]: ex_s.where(ex_s>3, other=0)
Out[7]:
r0 0
r1 0
r2 0
r3 0
r4 4
r5 5
dtype: int32
In[8]: ex_s # 원본 배열은 변하지 않음을 확인
Out[8]:
r0 0
r1 1
r2 2
r3 3
r4 4
r5 5
dtype: int32
# where 메서드(inplace 입력변수 사용, 원본배열의 변경)
In[9]: ex_s.where(ex_s>3, other=0, inplace=True)
In[10]: ex_s
Out[10]:
r0 0
r1 0
r2 0
r3 0
r4 4
r5 5
dtype: int32
다음 예제는 DataFrame에서의 where 적용 예이다.
대부분의 입력변수에 대한 내용은 Series 예제에서 다루었기 때문에 간단하게만 예제를 다도록 한다.
DataFrame에서의 where 메서드 사용 예)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제용 배열 선언
In[11]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])
# 대괄호[조건식]
In[12]: ex_df[ex_df>5]
Out[12]:
c0 c1 c2
r0 NaN NaN NaN
r1 NaN NaN NaN
r2 6.0 7.0 8.0
# where 메서드
In[13]: ex_df.where(ex_df>5, other=-1)
Out[13]:
c0 c1 c2
r0 -1 -1 -1
r1 -1 -1 -1
r2 6 7 8
조건식을 만족하지 못할 경우, 각 행 혹은 각 열마다 다른 값을 채워넣기 위해서 axis 변수를 이용하는 것이 가능하다.
○ axis=0인 경우: 조건식 불만족시, 각 행별로 설정된 값이 적용된다.
other에 입력되는 배열의 요소 개수는 행의 개수와 동일해야한다.
○ axis=1인 경우: 조건식 불만족시, 각 열별로 설정된 값이 적용된다.
other에 입력되는 배열의 요소 개수는 열의 개수와 동일해야한다.
axis 입력변수의 사용 예)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제용 배열 선언
In[14]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])
# axis=0 인 경우
In[15]: ex_df.where(ex_df<3, ex_df['c0'], axis=0)
Out[15]:
c0 c1 c2
r0 0 1 2
r1 3 3 3
r2 6 6 6
# axis=1 인 경우
In[16]: ex_df.where(ex_df<3, ex_df.loc['r0'], axis=1)
Out[16]:
c0 c1 c2
r0 0 1 2
r1 0 1 2
r2 0 1 2
mask 메서드 |
mask 메서드는 특정 조건에 맞지 않는 데이터들을 선택하여 출력하는데 사용될 수 있다.
○ 이 메서드는 조건식을 입력받는데, 조건식에 False에 해당하는 데이터들을 출력한다.
○ 이 메서드는 적용되는 Series나 DataFrame의 형상과 일치하는 데이터를 출력한다.
○ where 메서드와는 반대이다.
mask() 메서드 사용형식)
Series.mask(cond, other=None, inplace=False, axis=None)
DataFrame.mask(cond, other=None, inplace=False, axis=None)
참고사항(mask와 where 메서드간의 공통점과 차이점)
차이점: Where은 조건식이 True일 때 데이터를 살려두나, mask는 이와 반대로 False일 때 데이터를 살려둔다.
공통점: 그 외에 where메서드에서 적용된 입력변수들은 동일하게 적용 가능하다.
mask 메서드 사용 예제 |
다음은 mask 메서드에 대한 사용 예제이다.
mask 메서드의 입력변수에 대한 내용은 False일때 데이터를 선택한다는 것을 제외하고는 where 메서드와 동일하고 Series에서의 메서드 적용 방식도 동일하므로 해당 내용에 대한 예제는 생략하도록 한다.
mask 메서드 사용 예)
# pandas와 numpy의 import
In[2]: import pandas as pd
In[3]: import numpy as np
# 예제용 배열 선언
In[17]: ex_df=pd.DataFrame([[0,1,2],[3,4,5],[6,7,8]], index=['r0','r1','r2'], columns=['c0','c1','c2'])
# where 메서드
In[18]: ex_df.where(ex_df>5, other=-1)
Out[18]:
c0 c1 c2
r0 -1 -1 -1
r1 -1 -1 -1
r2 6 7 8
# mask 메서드
In[19]: ex_df.mask(ex_df>5, other=-1)
Out[19]:
c0 c1 c2
r0 0 1 2
r1 3 4 5
r2 -1 -1 -1
각 메서드 옵션 상세설명 |
DataFrame.where(self, cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False) |
cond에 입력된 값이 True일 경우 데이터를 그대로 두고, False일 경우 값을 대체하여 출력한다.
cond: boolean Series/DataFrame, array-like, or callable
cond가 True일 경우 기존값을 유지시킨다.
cond가 False일 경우, 기존값을 other값으로 대체한다.
cond가 callable일 경우 Series/DataFrame에서 계산되며, 불린 Series/DataFrame 혹은 배열을 반환한다.
callable은 반드시 입력 Series/DataFrame을 바꿔서는 안된다. (pandas는 이를 체크하지는 않는다.)
other: scalar, Series/DataFrame, or callable
cond가 False일 경우 해당 값을 other에 입력된 값으로 대체한다.
만약 callable이 입력될 경우 Series/DataFrame에서 계산이 되며, 반드시 스칼라나 Series/DataFrame값을 반환하여야 한다.
callable은 반드시 입력 Series/DataFrame을 변경해서는 안된다. (pandas는 이를 체크하지는 않는다.)
inplace: bool
해당 위치에서 연산을 수행한 후 대체할지 여부를 결정짓는다.
기본값은 False이다.
axis: int
메서드가 적용될 축을 선택한다.(각 축에 따라 다른 값을 채워 넣을 경우)
기본값은 None이다.
level : int
메서드가 적용될 레벨을 선택한다. (멀티인덱스 인 경우)
기본값은 None이다.
errors: str, {'raise', 'ignore'}
에러를 발생시킬 것인지, 발생시키지 않고 원본배열을 반환할 것인지 결정해준다.
기본값은 'raise'이다.
- 'raise': 예외를 발생시키는 것을 허가한다.
- 'ignore': 예외를 무시한다. 에러 발생시 원본 객체를 반환한다.
try_cast: bool
만약 가능하다면, 입력된 타입으로 결과를 캐스팅 하는 것을 시도한다.
기본값은 False이다.
DataFrame.mask(self, cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=False) |
cond에 입력된 값이 False일 경우 데이터를 그대로 두고, True일 경우 값을 대체하여 출력한다.
cond: boolean Series/DataFrame, array-like, or callable
cond가 False일 경우 기존값을 유지시킨다.
cond가 True일 경우, 기존값을 other값으로 대체한다.
cond가 callable일 경우 Series/DataFrame에서 계산되며, 불린 Series/DataFrame 혹은 배열을 반환한다.
callable은 반드시 입력 Series/DataFrame을 바꿔서는 안된다. (pandas는 이를 체크하지는 않는다.)
other: scalar, Series/DataFrame, or callable
cond가 True일 경우 해당 값을 other에 입력된 값으로 대체한다.
만약 callable이 입력될 경우 Series/DataFrame에서 계산이 되며, 반드시 스칼라나 Series/DataFrame값을 반환하여야 한다.
callable은 반드시 입력 Series/DataFrame을 변경해서는 안된다. (pandas는 이를 체크하지는 않는다.)
inplace: bool
해당 위치에서 연산을 수행할 지 여부를 결정짓는다.
기본값은 False이다.
axis: int
메서드가 적용될 축을 선택한다.(각 축에 따라 다른 값을 채워 넣을 경우)
기본값은 None이다.
level : int
메서드가 적용될 레벨을 선택한다. (멀티인덱스인 경우)
기본값은 None이다.
errors: str, {'raise', 'ignore'}
에러를 발생시킬 것인지, 발생시키지 않고 원본배열을 반환할 것인지 결정해준다.
기본값은 'raise'이다.
- 'raise': 예외를 발생시키는 것을 허가한다.
- 'ignore': 예외를 무시한다. 에러 발생시 원본 객체를 반환한다.
try_cast: bool
만약 가능하다면, 입력된 타입으로 결과를 캐스팅 하는 것을 시도한다.
기본값은 False이다.
'Python > Pandas' 카테고리의 다른 글
get 및 lookup 메서드 설명, 옵션, 사용 예제 -pandas(19) (0) | 2019.11.01 |
---|---|
query 메서드 옵션, 설명, 사용 예-pandas(18) (0) | 2019.10.31 |
isin 메서드 옵션 및 설명과 인덱싱-pandas(16) (0) | 2019.10.26 |
패스트 인덱싱(.at, .iat)-pandas(15) (0) | 2019.10.24 |
불린 배열(boolean array)을 이용한 인덱싱-pandas(14) (0) | 2019.10.23 |
댓글