ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python Pandas(2. 누락된 데이터 처리하기 .)
    Python/Python 2020. 2. 6. 14:27
    반응형

    누락된 데이터를 처리하는방법
    일단 누락된 데이터를 왜 처리하는지 부터 설명한다.
    현실 세계의 데이터는 깔끔하지않거나 일부 누락된 것 들이
    많이 존재한다 그래서 이러한 기법을 사용한다.

     

    import numpy as np
    import pandas as pd
    # 임의에 1차원 배열 에다가 누락된 값을 넣는다 
    vals1 = np.array([1,None , 3,4])
    vals1

     

    for dtype in ['object' , int]:
        print('dtype =' , dtype)
        %timeit np.arange(1E6, dtype=dtype).sum()
        print()

     

    #배열에서 파이썬 객체를(object) 사용하는 것은 None 값을 가진 배열에서  sum() 이나 min()
    #같은 집계연산을 하면 일반적으로 오류가 발생할 것이라는 뜻이기도함 . 
    vals1.sum()
    
    # None 은 덧샘이 정의되지않다는 사실을 보여줌
    

     

     

    #NaN : 누락된 숫자 데이터 (표준 IEEE 부동소수점 )
    #임이의 1차원 배열 누락된 데이터를 생성함 
    vals2 = np.array([1, np.nan, 3,4])
    vals2.dtype

     

     

    #부동 소수점을 사용한 것은 컴파일된 코드에 삽입된 빠른 연산을 지원한다는 뜻이다. 
    # NaN 과 접촉한 모든 인수들은 어떤 연산이든 관계없이 NaN으로 반환한다.
    1+ np.nan,0* np.nan

     

     

    # 오류를 내지않는 다는 것은 장점이지만 그 값이 항상 유효한 값은 아니다 . 
    vals2.sum(), vals2.min(),vals2.max()

     

     

    # Numpy는 누락된 값을 무시하는 몇 가지 특별 집계 연산을 제공한다.
    np.nansum(vals2) , np.nanmin(vals2) , np.nanmax(vals2)
    
    # NaN 은 부동 소수점 값이라는 것을 유념하자 . 정수나 문자열 등 다른 타입에는 NaN에 해당하는 값이 없다.

     

    #Pandas 에서 NaN 과 None
    pd.Series([1,np.nan, 2 ,None])

     

    #사용 할 수 있는 센티널 값이 없는 타입의 경우 NA 값이 있으면 Pandas 가 자동으로 타입을 변환한다.
    #가령 정수 배열의 값을 np.nan으로 설정하면 NA를 수용할 수 있도록 부동 소수점 타입으로
    #자동 상향 변환 한다 .
    
    #정수형 배열을 하나 생성함 
    x = pd.Series(range(2), dtype=int)
    x

     

    # Pandas 는 정수 배열을 실수형 배열로 변환하는것 과 동시에 None 값을 자동으로 NaN 값으로 변경시킴 . 
    x[0] = None
    x

     

    #널 값 연산하기 종류에는 
    # isnull()=누락 값을 가르키는 연산
    # notnull()  isnull 의 역
    # dropna() 데이터에 필터를 적용한 버전을 반혼
    # fillna() 누락 값을 채우거나 전가된 데이터 사본을 반환 

     

     

    # isnull() 을 사용하여 누락된 값은 True 로 반환 
    data = pd.Series([1,np.nan, 'hello' , None])
    data.isnull()

     

     

    # 널 값 제거하기
    # dropna() (NA값 제거하기) 와 fillna() (NA 값 채우기) 메서드 등이 존재함 .
    data.dropna()

     

    # NaN 값이 포함된 2차원 배열을 생성함 
    df = pd.DataFrame([[1, np.nan , 2 ] , [2,3,5] , [np.nan , 4 , 6]])
    df

     

     

    # 널 값을 제거할것이지만 한개 씩은 제거 할수 없어서 전채 행이나 전채 열을 삭제 할 것임 . 
    df.dropna()
    # 전채 행을 제거한경우 

     

     

    df.dropna(axis='columns')
    # 전체 열을 제거한 경우 

     

    # 하지만 위 방식은 일부 유요한 데이터도 삭제한다.
    df.dropna(axis='columns' , how='all')
    
    # 이런식으로 지정하면 모두 Null 일때만 삭제하게 된다. 

     

     

    #좀 더 세부적으로 제어하기 위해서는 thresh 매개변수로 행이나 열에서 널이 아닌 값이 몇갠지 지정할 수 있다.
    df.dropna(axis='rows' , thresh=3)
    # 0 행과 2행이 삭제 되는데 두개의 값 만이 널값이 아니기 떄문 . 

     

    # 널 값채우기 
    # 때로는 널값을 지울 때보다 Null 값을 0이나 다른 인수로 채우는 것이 더 좋을 때도 있다.
    data= pd.Series([1,np.nan , 2,None , 3] ,index=list('abcde')) #1차원 배열을 하나생성
    data

     

     

    # 0과 같은 단일 값으로 NA 항목을 채울 수 있다. 
    data.fillna(0) 

     

     

    # 이전 값으로도 채울 수 있다.  (forward)
    data.fillna(method='ffill')

     

    # 다음에 오는 값으로 채우기 (back)
    data.fillna(method='bfill')

     

     

    # 어느 축에 따라 채울것인지 axis 를 이용해 지정가능
    df.fillna(method='ffill' , axis=1) 

    반응형

    댓글

Designed by Tistory.