dropna function은 DataFrame에서 NaN value가 존재하는 행(row) 또는 열(column)을 제거해줍니다.
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를 진행
dropna에 대한 문서는 아래 링크입니다.
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.dropna.html
먼저 test용 DataFrame을 만듭시다.
import pandas as pd
import numpy as np
dict_test = {
'col1': [1, 2, 3, 4, 5],
'col2': ['a', 'b', np.nan, 'd', 'e'],
'col3': [np.nan, 1, 2, 3, 4]
}
df_test = pd.DataFrame(dict_test)
print(df_test)
-- Result
col1 col2 col3
0 1 a NaN
1 2 b 1.0
2 3 NaN 2.0
3 4 d 3.0
4 5 e 4.0
import pandas as pd
import numpy as np
dict_test = {
'col1': [1, 2, 3, 4, 5],
'col2': ['a', 'b', np.nan, 'd', 'e'],
'col3': [np.nan, 1, 2, 3, 4]
}
df_test = pd.DataFrame(dict_test)
print(df_test)
df_result = df_test.dropna(axis=0, inplace=False)
print(df_result)
df_result = df_test.dropna(axis='index', inplace=False)
print(df_result)
-- Result
col1 col2 col3
0 1 a NaN
1 2 b 1.0
2 3 NaN 2.0
3 4 d 3.0
4 5 e 4.0
col1 col2 col3
1 2 b 1.0
3 4 d 3.0
4 5 e 4.0
col1 col2 col3
1 2 b 1.0
3 4 d 3.0
4 5 e 4.0
위 예시는 axis = 0 or 'index'로 설정된 경우의 예시입니다.
DataFrame의 index = 0, index = 2인 row에 NaN값이 1개씩 포함되어있죠.
따라서 index = 0, index = 2인 row가 삭제되고 그 외의 row들만 return되었습니다.
import pandas as pd
import numpy as np
dict_test = {
'col1': [1, 2, 3, 4, 5],
'col2': ['a', 'b', np.nan, 'd', 'e'],
'col3': [np.nan, 1, 2, 3, 4]
}
df_test = pd.DataFrame(dict_test)
print(df_test)
df_result = df_test.dropna(axis=1, inplace=False)
print(df_result)
df_result = df_test.dropna(axis='columns', inplace=False)
print(df_result)
-- Result
col1 col2 col3
0 1 a NaN
1 2 b 1.0
2 3 NaN 2.0
3 4 d 3.0
4 5 e 4.0
col1
0 1
1 2
2 3
3 4
4 5
col1
0 1
1 2
2 3
3 4
4 5
위 예시는 axis = 1 or 'columns'로 설정된 경우의 예시입니다.
col2, col3에 NaN값이 1개씩 포함되어있으니 col2, col3가 모두 drop되고 결과에는 col1만 남아있죠.
import pandas as pd
import numpy as np
dict_test = {
'col1': [1, np.nan, 3, 4, 5],
'col2': [np.nan, np.nan, np.nan, np.nan,np.nan],
'col3': [0, np.nan, 2, 3, 4]
}
df_test = pd.DataFrame(dict_test)
print(df_test)
df_result = df_test.dropna(axis=0, how='all', inplace=False)
print(df_result)
-- Result
col1 col2 col3
0 1.0 NaN 0.0
1 NaN NaN NaN
2 3.0 NaN 2.0
3 4.0 NaN 3.0
4 5.0 NaN 4.0
col1 col2 col3
0 1.0 NaN 0.0
2 3.0 NaN 2.0
3 4.0 NaN 3.0
4 5.0 NaN 4.0
위 예시의 dropna를 해석해보면 다음과 같습니다.
axis = 0 -> NaN값이 있는 row를 drop함
how = 'all' -> row 전체가 NaN값이어야만 drop함.
따라서 모든 값이 NaN인 index = 1인 row만 drop되고
나머지 row는 그대로 return되었습니다.
import pandas as pd
import numpy as np
dict_test = {
'col1': [1, np.nan, 3, 4, 5],
'col2': [np.nan, np.nan, np.nan, np.nan,np.nan],
'col3': [0, np.nan, 2, 3, 4]
}
df_test = pd.DataFrame(dict_test)
print(df_test)
df_result = df_test.dropna(axis=1, how='all', inplace=False)
print(df_result)
-- Result
col1 col2 col3
0 1.0 NaN 0.0
1 NaN NaN NaN
2 3.0 NaN 2.0
3 4.0 NaN 3.0
4 5.0 NaN 4.0
col1 col3
0 1.0 0.0
1 NaN NaN
2 3.0 2.0
3 4.0 3.0
4 5.0 4.0
위 예시의 dropna를 해석해보면 다음과 같습니다.
axis = 1 -> NaN값이 있는 column을 drop함
how = 'all' -> column 전체가 NaN값이어야만 drop함.
따라서 모든 값이 NaN인 col2만 drop되고
나머지 column은 그대로 return되었습니다.
import pandas as pd
import numpy as np
dict_test = {
'col1': [1, 2, 3, 4, 5],
'col2': ['a', 'b', np.nan, 'd', 'e'],
'col3': [np.nan, 1, 2, 3, 4]
}
df_test = pd.DataFrame(dict_test)
print(df_test)
df_result = df_test.dropna(axis=0, subset=['col1', 'col2'], inplace=False)
print(df_result)
-- Result
col1 col2 col3
0 1 a NaN
1 2 b 1.0
2 3 NaN 2.0
3 4 d 3.0
4 5 e 4.0
col1 col2 col3
0 1 a NaN
1 2 b 1.0
3 4 d 3.0
4 5 e 4.0
위 예시는 subset에 col1, col2를 명시하였고,
따라서 col1, col2에서만 dropna를 진행합니다.
(col3의 index = 0에 NaN값이 있는데 index=0인 row는 drop되지 않았습니다.)
'IT > Python' 카테고리의 다른 글
Python - 데이터 클리닝 (drop_duplicates) (0) | 2022.11.08 |
---|---|
Python - 데이터 클리닝 (empty) (0) | 2022.11.08 |
Python - 데이터 클리닝 (duplicated) (0) | 2022.11.08 |
Python - 데이터 클리닝 (isna) (0) | 2022.11.08 |
Python Pandas DataFrame 인덱싱 (0) | 2022.11.04 |