[Python] 조건에 해당하는 array 값 변경

2024. 2. 21. 18:14·데이터분석

dataframe 보다 numpy 배열이 훨씬 빠르기도 하고, 딥러닝 모델의 input을 위해 array로 변환하여 처리해야 하는 일이 많다. 데이터프레임에서 조건에 맞는 행을 필터링해서 값을 변경하는 것처럼 numpy 배열에서도 조건에 맞는 원소를 변경하려면 어떻게 해야 할까? 

1) np.where 절로 조건에 해당하는 인덱스를 가져오기

# 예시로 사용할 배열 생성
arr = np.array([[0.1, 0.6, 0.3, 0.8, 0.2],
                 [0.7, 0.4, 0.9, 0.2, 0.5],
                 [0.3, 0.2, 0.6, 0.7, 0.1],
                 [0.8, 0.1, 0.5, 0.4, 0.9]])

# 2번 열과 4번 열에서 0.5를 초과하는 값의 인덱스 가져오기
indices = np.where(arr[:, [2, 4]] > 0.5)

>>> indices
(array([1, 2, 3]), array([0, 0, 1]))

2차원 배열이다 보니 가져오는 인덱스 값이 튜플형태로 되어 있다. 

indices 에서 첫번째 요소는 조건을 만족하는 행 인덱스를 의미하며, 두번째 요소는 조건을 만족하는 열 인덱스를 의미한다. 

즉, 배열에서 1행의 0번째 열(2,4열 중 0번째=2열)인 arr[1,2]의 데이터인 0.9,
배열에서 2행의 0번째 열인 arr[2,2]의 데이터인 0.6, 
배열에서 3행의 1번째 열(4열)인 arr[3,4] 데이터인 0.9를 의미한다. 

2) 인덱스에 해당하는 각 원소를 원하는 값으로 변경  

# 인덱스에 해당하는 각 원소를 0으로 설정
for i in range(len(indices[0])):
    arr[indices[0][i], [2, 4][indices[1][i]]] = 0

print(arr)
>>> arr
array([[0.1, 0.6, 0.3, 0.8, 0.2],
       [0.7, 0.4, 0. , 0.2, 0.5],
       [0.3, 0.2, 0. , 0.7, 0.1],
       [0.8, 0.1, 0.5, 0.4, 0. ]])

각 인덱스에 해당하는 원소를 튜플형태기 때문에 각각 인덱싱하여 원하는 값인 0으로 for문으로 반복하여 변경해주면 
결과가 위와 같이 각 인덱스에 0으로 변경된 것을 확인할 수 있다. 

'데이터분석' 카테고리의 다른 글

시계열에서 변화된 지점 찾기 : Change Point Detection (CPD) 기법  (2) 2024.10.27
[데이터시각화] 지수표현(+e)된 축 눈금 일반 숫자 형식으로 바꾸기  (0) 2024.03.20
[데이터시각화] 시계열 그래프 위에 결측정보 text로 겹치지 않게 표시하기  (0) 2024.03.20
[Python] min-max 벗어난 값을 min, max값으로 대체하기  (0) 2024.02.21
'데이터분석' 카테고리의 다른 글
  • 시계열에서 변화된 지점 찾기 : Change Point Detection (CPD) 기법
  • [데이터시각화] 지수표현(+e)된 축 눈금 일반 숫자 형식으로 바꾸기
  • [데이터시각화] 시계열 그래프 위에 결측정보 text로 겹치지 않게 표시하기
  • [Python] min-max 벗어난 값을 min, max값으로 대체하기
데이by데이
데이by데이
  • 데이by데이
    Carpe Diem
    데이by데이
  • 전체
    오늘
    어제
    • 분류 전체보기 (43)
      • AI (5)
      • 데이터분석 (5)
      • MLOps (2)
      • 프로젝트 (2)
      • Personal (5)
      • Algorithm (12)
      • TIL (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    numpy
    이상탐지
    2025 다짐
    구간분할
    ai대학원진학
    change point detection
    #99클럽 #코딩테스트준비 #개발자취업 #항해99 #til
    single-turn
    change point analysis
    멀티턴
    pc알고리즘
    오블완
    회고
    개발책추천
    최적화알고리즘
    시계열데이터분석
    Python
    변화점찾기
    더나은프로그래머되는법
    맹그로브고성
    causal discovery
    티스토리챌린지
    2024 회고
    Rag
    LLM
    데이터시각화
    유전알고리즘개념
    유전알고리즘예제
    인과발견
    AI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
데이by데이
[Python] 조건에 해당하는 array 값 변경
상단으로

티스토리툴바