- 데이터프레임 결측치 확인 및 처리
데이터 분석할 때, 결측치를 무조건 제거하는 방법은 옮지 않다.
상황에 따라 새로운 값으로 채우거나 제거하는 등 다양한 방법을 사용한다.
- python 결측치 확인
- python 결측치 제거
- python 결측치 대체
- python 결측치 연산
1. python 결측치 확인
예제 데이터를 살펴보자.
import pandas as pd
import numpy as np
a = ['2/18', '2/18', '2/18', '2/18', '2/20', '2/20', '2/20', '2/20', '2/25', '2/25', '2/25']
b = ['철수', '철수', '철수', '영희', '영희', '영희', '영희', '철수', '영희', '영희', '철수']
c = ['치킨', None, '닭발', '치킨', '닭발', '짜장면', np.nan, '치킨', '피자', '치킨', '피자']
d = [1,2,1,3,None,4,2,5,3,np.nan,3]
data = pd.DataFrame({'날짜':a,'사람':b,'음식':c,'개수':d})
data
결측치 확인은 두 가지만 알면 된다.
isnull()과 notnull()
data.isnull()
isnull은 결측치 부분만 True로 나오고 나머지는 False로 나온다.
notnull은 반대이다.
결측치가 있는 행을 보고 싶다면 색인을 활용한다.
data[data['음식'].isnull()]
2. python 결측치 제거
결측치가 있는 행을 제외하는 방법은 두 가지가 있다.
data[data['음식'].notnull()]
색인을 활용하거나
data.dropna()
dropna()를 사용한다.
data.dropna(inplace = True)
data
inplace 인자를 사용하면 변수에 담지 않고 바로 적용이 된다.
3. python 결측치 대체
fillna()를 이용하면 결측치에 채워준다.
data['음식'].fillna('스파게티')
0 치킨
1 스파게티
2 닭발
3 치킨
4 닭발
5 짜장면
6 스파게티
7 치킨
8 피자
9 치킨
10 피자
Name: 음식, dtype: object
4. python 결측치 연산
data['개수'][4] +1
nan
사칙연산을 하면 nan값이 나오지만
sum(), mean() 등의 함수를 사용하면 값이 제대로 나온다.
결측치가 표기 되고 싶게 하려면
data['개수'].mean(skipna = False)
nan
skipna 인자를 사용한다.
5. python 결측치 연산 주의
다시 예제 데이터를 살펴보자.
import pandas as pd
import numpy as np
a = ['2/18', '2/18', '2/18', '2/18', '2/20', '2/20', '2/20', '2/20', '2/25', '2/25', '2/25']
b = ['철수', '철수', '철수', '영희', '영희', '영희', '영희', '철수', '영희', '영희', '철수']
c = ['치킨', None, '닭발', '치킨', '닭발', '짜장면', np.nan, '치킨', '피자', '치킨', '피자']
d = [1,2,1,3,None,4,2,5,3,np.nan,3]
data = pd.DataFrame({'날짜':a,'사람':b,'음식':c,'개수':d})
data
python에서 None과 NaN은 차이가 있다.
문자에서는 그대로 나오지만, 숫자에서는 모두 NaN으로 표기된다.
여기서 연산할 때, 조심해야 할 부분이 있다.
data['개수'].sum()
24.0
'결측치가 있어도 연산이 되는구나'하고 넘어가면 안된다.
NaN을 제외하고 합산하면 20이 나와야 한다.
즉, None으로 들어갔던 수치는 뒤에있는 데이터로 바뀌어 들어간다는 것이다.
'PYTHON > python 예제' 카테고리의 다른 글
[python] 파이썬 날짜 변환 (0) | 2020.03.17 |
---|
댓글