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

20210920_164126_1.png

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