pandas_statistics2

기술 통계 계산 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