-
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)
반응형'Python > Python' 카테고리의 다른 글
Python 윈도우 잠금 하기 (0) 2020.04.09 Python 개발일지 (1. 마우스 좌표 값 csv로 저장하기) (0) 2020.04.09 Python Pandas (1. Pandas에서 데이터 연산하기) (0) 2020.02.04 Python ( list 중복 요소 제거 ) (0) 2020.01.31 Python (알고리즘 백준 10871) (0) 2020.01.30