오늘은 numpy masking 방법에 대해 알아본다.
masking은 array에서 일부 element를 무시하는 역할을 한다.
numpy array masking
numpy에서 조건을 만족하지 않는 배열의 일부를 연산에서 제외시키거나 표현을 하고 싶지 않을 때 사용한다.
indexing은 완전히 미충족 조건인 요소를 filter 하는 것이라면 masking은 가져가되 연산에만 사용하지 않는 것이다.
import numpy as np
data = np.array([10, 20, 30, 40, 50])
# 예: 30보다 큰 값은 무시 (마스크 처리)
masked = np.ma.masked_greater(data, 30)
print(masked)
# [10 20 30 -- --] # 마스킹된 값은 --로 표시됨
# 마스킹된 값은 연산에서 자동으로 제외됨
print(masked.mean()) # 20.0
"""
masked_array(data=[10, 20, 30, --, --],
mask=[False, False, False, True, True],
fill_value=999999)
"""
직접 mask라는 boolen 배열을 만들어 사용할 수 있다.
조건식을 주기 애매할 때, 원하는 boolen 배열을 할당하면 좋을 것 같다.
mask = np.array([False, False, True, True, True])
masked = np.ma.array(data, mask=mask)
print(masked)
# [10 20 -- -- --]
내가 보기엔 대체로 이 것을 자주 쓸 것 같다.
array를 주고, 내가 원하는 조건만 줘서 아닌 것들은 masking 시키는 것이다.
np.ma.array(data, mask=data>=30)
"""
masked_array(data=[10, 20, --, --, --],
mask=[False, False, True, True, True],
fill_value=999999)
"""
반응형
pandas에서 masked elements 대체
"--"는 numpy에서만 특별한 존재다. 다른 곳에서는 문자열로 인식한다.
"--"를 통해 numpy에서 출력 시 masked되었다는 사실을 쉽게 알려주는 역할을 할 뿐이다.
pandas에서 --를 nan값으로 바꿔 분석할거면 아래를 사용해도 된다.
df.replace('--', np.nan, inplace=True)
indexing을 통해 filter하게 되면 그 요소는 날아가버리니까, 그 자리에 masked로 연산을 제외만 시키는 것도 꽤나 유용한 방법이다.
다시 불러오고 싶으면 fill로 살리면 된다.
masked element를 특정 값으로 대체
masked.filled(0)
# → array([10, 20, 30, 0, 0]) # --가 0으로 대체됨반응형
'Python > 알고리즘' 카테고리의 다른 글
| [Python] Custom Curve fitting과 Residual 분석 비교하기(ft. plt.ginput) (0) | 2025.11.24 |
|---|---|
| python dictionary unpacking의 모든 것(딕셔너리 unpacking, merge, 병합) (0) | 2025.08.22 |
| Pandas map() vs apply(lambda): Same Result, Different Paths (0) | 2025.07.10 |
| [python] 직관적으로 cumulative count 계산하기(ft. pandas, numpy) (0) | 2025.03.19 |
| explode의 이해: Pandas dataframe에서 list 원소를 펼치는 방법 (0) | 2025.03.09 |