728x90
Handling Missing Data¶
In [1]:
import pandas as pd
import numpy as np
In [2]:
df = pd.DataFrame([[np.nan, 3, np.nan, 0], [5, 2, 3, 1],
[np.nan, np.nan, np.nan, 8], [4, np.nan, 6, 8]],
columns=list('ABCD'))
df
Out[2]:
A | B | C | D | |
---|---|---|---|---|
0 | NaN | 3.0 | NaN | 0 |
1 | 5.0 | 2.0 | 3.0 | 1 |
2 | NaN | NaN | NaN | 8 |
3 | 4.0 | NaN | 6.0 | 8 |
isna(), notna(): 결측치 여부 확인¶
In [3]:
df.isna().sum()
Out[3]:
A 2 B 2 C 2 D 0 dtype: int64
- is.na는 결측치의 유무를 True/Flase 형태로 반환하여 주고, 여기에 sum()을 하면 컬럼별로 결측치의 수를 확인할 수 있습니다.
In [4]:
df.notna().sum()
Out[4]:
A 2 B 2 C 2 D 4 dtype: int64
- 반대로 notna는 결측치가 아닌 수를 확인할 수 있습니다.
dropna(): 결측지 삭제¶
In [5]:
df.dropna()
Out[5]:
A | B | C | D | |
---|---|---|---|---|
1 | 5.0 | 2.0 | 3.0 | 1 |
- 결측치가 하나라도 존재하면 그 행을 삭제합니다.
In [6]:
df.dropna(subset=['A'])
Out[6]:
A | B | C | D | |
---|---|---|---|---|
1 | 5.0 | 2.0 | 3.0 | 1 |
3 | 4.0 | NaN | 6.0 | 8 |
- 다음과 같이 특정 열을 선택하여 결측치를 제거할 수도 있습니다.
fillna(): 결측치 대체¶
In [7]:
df.fillna(0)
Out[7]:
A | B | C | D | |
---|---|---|---|---|
0 | 0.0 | 3.0 | 0.0 | 0 |
1 | 5.0 | 2.0 | 3.0 | 1 |
2 | 0.0 | 0.0 | 0.0 | 8 |
3 | 4.0 | 0.0 | 6.0 | 8 |
- 다음은 결측치의 값을 0으로 대체합니다.
In [8]:
df
Out[8]:
A | B | C | D | |
---|---|---|---|---|
0 | NaN | 3.0 | NaN | 0 |
1 | 5.0 | 2.0 | 3.0 | 1 |
2 | NaN | NaN | NaN | 8 |
3 | 4.0 | NaN | 6.0 | 8 |
In [9]:
df.fillna({'B':df['B'].mean()})
Out[9]:
A | B | C | D | |
---|---|---|---|---|
0 | NaN | 3.0 | NaN | 0 |
1 | 5.0 | 2.0 | 3.0 | 1 |
2 | NaN | 2.5 | NaN | 8 |
3 | 4.0 | 2.5 | 6.0 | 8 |
- 다음과 같이 특정열의 평균, 표준편차 등의 통계값의 대체도 가능합니다.
In [10]:
from IPython.core.display import display, HTML
display(HTML("<style>.container {width:90% !important;}</style>"))
'Python' 카테고리의 다른 글
[Pandas] Pandas Cheat Sheet(Combine Data Sets) (0) | 2021.06.22 |
---|---|
[Pandas] Pandas Cheat Sheet(Make New Columns) (0) | 2021.06.21 |
[Pandas] Pandas Cheat Sheet(Summarize Data) (0) | 2021.06.20 |
[Pandas] Pandas Cheat Sheet(Subset Variables (Columns)) (0) | 2021.06.20 |
[Pandas] Pandas Cheat Sheet(Subset Observations(Rows)) (0) | 2021.05.23 |