파이썬(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

     

     

     

    반응형