기술 통계 계산 2
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
from numpy import nan as NA
1. Series 객체에서 누락된 데이터 골라내기
1) dropna 메서드 이용(대표적인 방법)
- dropna 메서드는 series 객체를 반환
s1 = Series([1, NA, 3.4, NA, 8])
s1
0 1.0
1 NaN
2 3.4
3 NaN
4 8.0
dtype: float64
s1.dropna()
0 1.0
2 3.4
4 8.0
dtype: float64
2) boolean 색인을 이용해서 직접 계산 후에 가져오기
s1.notnull()
0 True
1 False
2 True
3 False
4 True
dtype: bool
s1[s1.notnull()]
0 1.0
2 3.4
4 8.0
dtype: float64
2. DataFrame 객체에서 누락된 데이터 골라내기
1) dropna 메서드 이용
- dropna는 기본적으로 NA값이 하나라도 있는 row는 제외됨
data = DataFrame([[1,5,5,3],
[1,NA,NA],
[NA,NA,NA],
[NA,3.3,3]])
data
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 5.0 | 5.0 | 3.0 |
1 | 1.0 | NaN | NaN | NaN |
2 | NaN | NaN | NaN | NaN |
3 | NaN | 3.3 | 3.0 | NaN |
data.dropna()
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 5.0 | 5.0 | 3.0 |
- how='all' 옵셥을 주면 모든값이 NA인 row만 제외(how='any'가 기본값)
data.dropna(how='all')
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 5.0 | 5.0 | 3.0 |
1 | 1.0 | NaN | NaN | NaN |
3 | NaN | 3.3 | 3.0 | NaN |
data[4] = NA
data
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 1.0 | 5.0 | 5.0 | 3.0 | NaN |
1 | 1.0 | NaN | NaN | NaN | NaN |
2 | NaN | NaN | NaN | NaN | NaN |
3 | NaN | 3.3 | 3.0 | NaN | NaN |
- how='all' 옵셥과 axis값을 동시에 주면 모든값이 NA인 column만 제외(how='any'가 기본값)
data.dropna(how='all', axis=1)
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 5.0 | 5.0 | 3.0 |
1 | 1.0 | NaN | NaN | NaN |
2 | NaN | NaN | NaN | NaN |
3 | NaN | 3.3 | 3.0 | NaN |
- thresh: 몇개의 value가 들어 있는 행을 가져오고 싶은 경우 사용되는 파라미터
data2 = DataFrame([[1,2,3,NA],
[NA,33,11,NA],
[11,NA,NA,NA],
[43,NA,NA,NA]])
data2
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 2.0 | 3.0 | NaN |
1 | NaN | 33.0 | 11.0 | NaN |
2 | 11.0 | NaN | NaN | NaN |
3 | 43.0 | NaN | NaN | NaN |
data2.dropna(thresh=2)
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 2.0 | 3.0 | NaN |
1 | NaN | 33.0 | 11.0 | NaN |
3. 누락된 값을 채우기
- DataFrame에서는 누락된 데이터를 완벽하게 골라낼 수 없으므로 의도하지 않게 다른 데이터도 함께 버려지게 됨
- fillna 메서드를 활용하여 누락된 값을 채우는 것이 유용
data2
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 2.0 | 3.0 | NaN |
1 | NaN | 33.0 | 11.0 | NaN |
2 | 11.0 | NaN | NaN | NaN |
3 | 43.0 | NaN | NaN | NaN |
1) fillna 메서드 이용
data2.fillna(0)
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 2.0 | 3.0 | 0.0 |
1 | 0.0 | 33.0 | 11.0 | 0.0 |
2 | 11.0 | 0.0 | 0.0 | 0.0 |
3 | 43.0 | 0.0 | 0.0 | 0.0 |
2) fillna 메서드를 활용하여 각 column마다 다른 값을 채워 넣음: dictionary로 값 지정
data2.fillna({1:10, 3:30})
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 2.0 | 3.0 | 30.0 |
1 | NaN | 33.0 | 11.0 | 30.0 |
2 | 11.0 | 10.0 | NaN | 30.0 |
3 | 43.0 | 10.0 | NaN | 30.0 |
3) 보간법 이용
data2
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 1.0 | 2.0 | 3.0 | NaN |
1 | NaN | 33.0 | 11.0 | NaN |
2 | 11.0 | NaN | NaN | NaN |
3 | 43.0 | NaN | NaN | NaN |
data.fillna(method='ffill')
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
0 | 1.0 | 5.0 | 5.0 | 3.0 | NaN |
1 | 1.0 | 5.0 | 5.0 | 3.0 | NaN |
2 | 1.0 | 5.0 | 5.0 | 3.0 | NaN |
3 | 1.0 | 3.3 | 3.0 | 3.0 | NaN |
4) 평균값으로 채우기
s2 = Series([1, NA, 3.5, NA, 7])
s2
0 1.0
1 NaN
2 3.5
3 NaN
4 7.0
dtype: float64
s2.fillna(s2.mean())
0 1.000000
1 3.833333
2 3.500000
3 3.833333
4 7.000000
dtype: float64
'AI&BigData > Basics' 카테고리의 다른 글
[Pandas] 기술통계 계산 1 (0) | 2018.06.03 |
---|---|
Confusion matrix, accuracy, f1 score, precision, recall (0) | 2018.05.28 |
[Pandas] 정렬과 순위 (1) | 2018.05.06 |
[Pandas] 함수 적용과 매핑 (0) | 2018.05.06 |
[Pandas] Operation (0) | 2018.05.06 |
[Pandas] Index 객체, reindex (0) | 2018.05.06 |
[Pandas] DataFrame (0) | 2018.04.30 |
[Pandas] Series 객체 (0) | 2018.04.29 |
[Numpy] 브로드캐스트. 기타활용 (0) | 2018.04.24 |