일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- PANDAS
- dataframe
- array
- c#
- google apps script
- PostgreSQL
- Python
- django
- Excel
- GIT
- Redshift
- matplotlib
- SQL
- Github
- Google Excel
- Java
- PySpark
- list
- numpy
- hive
- Kotlin
- math
- Apache
- Google Spreadsheet
- Tkinter
- string
- 파이썬
- gas
- Mac
- Today
- Total
달나라 노트
Python Pandas : dropna (NaN value가 있는 row/column 제거하기) 본문
Python Pandas : dropna (NaN value가 있는 row/column 제거하기)
CosmosProject 2021. 6. 8. 17:02
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되지 않았습니다.)
'Python > Python Pandas' 카테고리의 다른 글
Python Pandas : shape (DataFrame의 행/열 개수(DataFrame 크기) 반환) (0) | 2021.06.11 |
---|---|
Python Pandas : melt (unpivot 가로 데이터를 세로 데이터로 변경) (0) | 2021.06.08 |
Python Pandas : notna (누락값 여부 체크하기) (0) | 2021.03.18 |
Python Pandas : rolling (DataFrame window function) (0) | 2021.01.22 |
Python Pandas : fillna (DataFrame에서 NaN값을 replace 하기) (0) | 2021.01.20 |