12 MissingValue
| 9 Minute Read on Pandas
Missing Data¶
Pandas에는 Database에서 Null과 유사한 NaN이 존재함.
- NaN은 Not a number라는 의미로, numpy에서의 개념이지만
- Pandas에서는 존재할 수도 있지만 측정이 되지 않는 값임(not present for whatever reason missing value)
- pandas에서는 NaN을 숫자형에 가깝게 인식함, 참고로 oracle의 경우 컬럼에 null이 있으면 숫자형으로 정의할 수 있음.
- ' ' 이 Null에 더 가까운 개념임.
NaN을 조회하는 메소드로는
- isnull(), notnull()
- isnull().values.any()
- NaN을 처리하는 메소드로는
- dropna(), fillna()
In [1]:
import pandas as pd
import numpy as np
#pandas를 사용하기 위해서 import함
data = [[ 0, 1, 2, 3]
,[ 4, 5, 6, 7]
,[ 8, 9, 10, 11]]
index = [2002, 2003, 2004 ]
columns = ['Arizona','Boston', 'Chicago','Detroit']
df = pd.DataFrame(data = data, index = index, columns = columns)
## DataFrame() 안에 data, index, columns은 생략 가능함
print(df)
In [2]:
# None을 사용해도 NaN으로 인식
df.iloc[0,0] = np.NaN
df.iloc[0,1] = None
df
Out[2]:
In [3]:
# '' 로 할당
df.iloc[1,2] = ''
df.iloc[1,3] = ''
df
Out[3]:
In [4]:
#NaN의 경우는 count하지 않음 , ''의 경우은 할당함
df.count()
Out[4]:
In [5]:
#NaN의 경우는 평균과 분산 값을 계산
print(df.mean())
df.std()
Out[5]:
In [6]:
# NaN으로 할당한 경우에는 숫자형이 었던 컬럼 타입이 변하지 않았지만 '' 로 변경된 타입은 숫자형이 Object 변경 되었음
df.dtypes
Out[6]:
In [7]:
# isnull() 메소드를 사용하여 컬럼을 기준으로 조회할 수 있음
df[df['Arizona'].isnull()]
Out[7]:
In [16]:
# notnull() 메소드를 사용하여 컬럼을 기준으로 조회할 수 있음
df[df['Arizona'].notnull()]
Out[16]:
In [9]:
# fillna메소드를 사용하여 NaN 값을 다른 값으로 대체할 수 있음
df.fillna(df.mean())
Out[9]:
In [10]:
# dropna메소드를 NaN 값을 제거할 수 있음
df.dropna()
Out[10]:
In [11]:
# '' 값을 조회할 수 있는 방법
df.applymap(lambda x: x =='')
Out[11]:
In [12]:
# 컬럼 단위로 '' 값을 조회할 수 있는 방법
df[df['Detroit'].map(lambda x: x =='')]
Out[12]:
In [13]:
# replace 메소드로 '' 를 NaN으로 대체 할 수 있음
df.replace('',np.NaN)
Out[13]: