본문 바로가기

Python_Intermediate/Pandas

Data Refining NA Data(데이터 정제 결측치)

반응형

1. 결측치(Null)

데이터 중에 비어 있는 값.

수집 과정에서 오류로 발생한다.


2. DataFrame Source

grade_dic = {
'국어': [98, 88, 92, 63, None],
'영어': [None, 90, 70, 60, 50],
'수학': [88, 62, None, 31, None],
'과학': [64, 72, None, 70, 88]
}

import pandas
from pandas import DataFrame
from prettytable import PrettyTable

df = DataFrame(grade_dic, index=['코난', '뭉치', '아름', '세모', '장미'])

if isinstance(df, pandas.core.frame.DataFrame):
table = PrettyTable([''] + list(df.columns))
for row in df.itertuples():
table.add_row(row)

print(str(table))

else:
print(df)

+------+------+------+------+------+

|      | 국어 | 영어 | 수학 | 과학 |

+------+------+------+------+------+

| 코난 | 98.0 | nan  | 88.0 | 64.0 |

| 뭉치 | 88.0 | 90.0 | 62.0 | 72.0 |

| 아름 | 92.0 | 70.0 | nan  | nan  |

| 세모 | 63.0 | 60.0 | 31.0 | 70.0 |

| 장미 | nan  | 50.0 | nan  | 88.0 |

+------+------+------+------+------+


Process finished with exit code 0


3. 결측치 확인(결측치 - True / 정상 - False)

miss_data = df.isnull()

miss_data = df.isna()

+------+-------+-------+-------+-------+

|      |  국어 |  영어 |  수학 |  과학 |

+------+-------+-------+-------+-------+

| 코난 | False |  True | False | False |

| 뭉치 | False | False | False | False |

| 아름 | False | False |  True |  True |

| 세모 | False | False | False | False |

| 장미 |  True | False |  True | False |

+------+-------+-------+-------+-------+


4. 결측치 카운팅

miss_data_sum = miss_data.sum()

국어    1

영어    1

수학    2

과학    1

dtype: int64


Process finished with exit code 0


5. 결측치 포함 행 삭제(inplace = True : 삭제 결과가 리턴 되지 않고 원본 적용)

na_del = df.dropna()

+------+------+------+------+------+

|      | 국어 | 영어 | 수학 | 과학 |

+------+------+------+------+------+

| 뭉치 | 88.0 | 90.0 | 62.0 | 72.0 |

| 세모 | 63.0 | 60.0 | 31.0 | 70.0 |

+------+------+------+------+------+


Process finished with exit code 0


6. 결측치 포함 열 삭제(inplace = True : 삭제 결과가 리턴 되지 않고 원본 적용)

na_del = df.dropna(axis=1)

+------+

|      |

+------+

| 코난 |

| 뭉치 |

| 아름 |

| 세모 |

| 장미 |

+------+


Process finished with exit code 0


7. 행의 모든 값이 결측치면 행 삭제
na_del = df.dropna(how='all')

+------+------+------+------+------+

|      | 국어 | 영어 | 수학 | 과학 |

+------+------+------+------+------+

| 코난 | 98.0 | nan  | 88.0 | 64.0 |

| 뭉치 | 88.0 | 90.0 | 62.0 | 72.0 |

| 아름 | 92.0 | 70.0 | nan  | nan  |

| 세모 | 63.0 | 60.0 | 31.0 | 70.0 |

| 장미 | nan  | 50.0 | nan  | 88.0 |

+------+------+------+------+------+


Process finished with exit code 0


8. 열의 모든 값이 결측치면 열 삭제

na_del = df.dropna(how='all', axis=1)

+------+------+------+------+------+

|      | 국어 | 영어 | 수학 | 과학 |

+------+------+------+------+------+

| 코난 | 98.0 | nan  | 88.0 | 64.0 |

| 뭉치 | 88.0 | 90.0 | 62.0 | 72.0 |

| 아름 | 92.0 | 70.0 | nan  | nan  |

| 세모 | 63.0 | 60.0 | 31.0 | 70.0 |

| 장미 | nan  | 50.0 | nan  | 88.0 |

+------+------+------+------+------+


Process finished with exit code 0

반응형