파이썬(Python)/numpy

[Python] Numpy where 함수란? 예제 실습

끄적끄적아무거나 2023. 1. 18. 09:15
반응형

 

 

 

 

 

 

파이썬 Numpy where 함수란?

 

파이썬 numpy.where() 함수는 조건에 맞는 입력 어레이(array) 값의 인덱스(index) 값을 알려줍니다.

 

Syntax는 아래와 같습니다. 

 

 

numpy.where(condition[, x, y])

 

조건문이 만족(True)할 경우 x값을 False 일 경우 y를 출력 해줍니다.  조건만 있을 경우 조건의 입력 값에 index를 출력 해줍니다. 

 

 

 

 

파이썬 Numpy where 예제 실습#1

 

예제 코드>>

import numpy as np
  
a_var = np.array([[1, 2, 3], [4, 5, 6]])

print("raw_data")
print(a_var)
  
print ("5와 같거나 작은 index 값")
indices = np.where(a_var<=5)
print(indices)
  
print("Index values")
print(a_var[indices])

3번째 라인: 2x3 매트릭스를 만들어 줍니다. 

5~6번 라인: 입력값을 출력 해줍니다.

8~10번 라인: where 함수를 사용해서 입력 값 중에 5와 같거나 작은 값의 index를 출력 합니다.

12~13번 라인: 인덱스 값을 넣어서 해당 값들을 불러 옵니다.

 

 

 

 

 

결과>>

raw_data
[[1 2 3]
 [4 5 6]]
5보다 큰 index 값
(array([0, 0, 0, 1, 1], dtype=int64), array([0, 1, 2, 0, 1], dtype=int64))
Index values
[1 2 3 4 5]

 

 

 

 

 

파이썬 Numpy where 예제 실습#2

 

다음은 판다스 데이터 프레임(Dataframe)에 값을 일부만 원하는 값으로 넣고 나머지는 랜덤으로 채울 때 사용하는 방법 입니다. 

 

예제 코드>>

import numpy as np
import pandas as pd

data_df = pd.DataFrame({
    "James":np.where(np.random.uniform(0,1,10)<0.3, np.nan, np.random.randint(0,20,10) ),
    "Jone":np.where(np.random.uniform(0,1,10)<0.3, np.nan, np.random.randint(0,20,10) ),
    "Michael":np.random.randint(0,20,10),
})

print(data_df)

5번 라인: np.where 을 사용해서 np.random.uniform 으로 0~1사이 수를 10개 만들고 이중에 값이 0.3 이하인 경우에는 np.nan 값을 넣고 나머지는 0~20 사이 정수로 랜덤하게 채워 줍니다. 

 

 

 

 

결과>>

   James  Jone  Michael
0   19.0  17.0       18
1    NaN  13.0       17
2   14.0   NaN        9
3    8.0   6.0       17
4   10.0  12.0        3
5   18.0  10.0       17
6   17.0   NaN       17
7    NaN  18.0        1
8    NaN   NaN       18
9    9.0  17.0       19

 

 

 

반응형