Pandas_Handling_Missing_Data
import pandas as pd
import numpy as np
df = pd.DataFrame([[np.nan, 2, np.nan, 0], [3, 4, np.nan, 1],
[np.nan, np.nan, np.nan, 5]],
columns=list('ABCD'))
df
A | B | C | D | |
---|---|---|---|---|
0 | NaN | 2.0 | NaN | 0 |
1 | 3.0 | 4.0 | NaN | 1 |
2 | NaN | NaN | NaN | 5 |
df.dropna(axis=1, how='all')
A | B | D | |
---|---|---|---|
0 | NaN | 2.0 | 0 |
1 | 3.0 | 4.0 | 1 |
2 | NaN | NaN | 5 |
dropna의 syntax는 다음과 같습니다.
DataFrame.dropna(axis=0/1, how=’any’/’all’, subset=[col1, col2, …], inplace=True/False) dropna에 들어갈 수 있는 parameter들은 더 많지만 일단 대표적인 것들만 보겠습니다.
axis = 0/1 or ‘index’/’columns’
0 or ‘index’ -> NaN 값이 포함된 row를 drop (default 값입니다.)
1 or ‘columns’ -> NaN 값이 포함된 column을 drop
how = ‘any’/’all’
any -> row 또는 column에 NaN값이 1개만 있어도 drop (default 값입니다.)
all -> row 또는 column에 있는 모든 값이 NaN이어야 drop
inplace = True/False
True -> dropna가 적용된 DataFrame 자체에 dropna를 적용
False -> dropna가 적용된 DataFrame는 그대로 두고 dropna를 적용한 DataFrame을 return
subset = [col1, col2, …]
subset을 명시하지 않으면 DataFrame 전체(모든 column & 모든 row)에 대해 dropna를 진행
subset을 명시하면 subset에 적힌 column값에 대해서만 dropna를 진행
https://cosmosproject.tistory.com/308 참고
df.dropna(axis=1, how='any')
D | |
---|---|
0 | 0 |
1 | 1 |
2 | 5 |
df.fillna(0) #NaN 값을 0으로 채운다
A | B | C | D | |
---|---|---|---|---|
0 | 0.0 | 2.0 | 0.0 | 0 |
1 | 3.0 | 4.0 | 0.0 | 1 |
2 | 0.0 | 0.0 | 0.0 | 5 |
values = {'A': 0, 'B': 1, 'C': 2, 'D': 3}
df.fillna(value=values) # NaN값을 values 값으로 채운다
A | B | C | D | |
---|---|---|---|---|
0 | 0.0 | 2.0 | 2.0 | 0 |
1 | 3.0 | 4.0 | 2.0 | 1 |
2 | 0.0 | 1.0 | 2.0 | 5 |
df
A | B | C | D | |
---|---|---|---|---|
0 | NaN | 2.0 | NaN | 0 |
1 | 3.0 | 4.0 | NaN | 1 |
2 | NaN | NaN | NaN | 5 |
fill_na_value = df['D'].max()
fill_na_value
5
df.fillna(fill_na_value)
A | B | C | D | |
---|---|---|---|---|
0 | 5.0 | 2.0 | 5.0 | 0 |
1 | 3.0 | 4.0 | 5.0 | 1 |
2 | 5.0 | 5.0 | 5.0 | 5 |
df.isnull().sum()
A 2
B 1
C 3
D 0
dtype: int64
df.notnull().sum()
A 1
B 2
C 0
D 3
dtype: int64