결측값 확인 및 추출


1
import pandas as pd
1
df = pd.read_csv('korean-idol.csv')

1. 결측값에 대하여

  • Null 값은 비어있는 값, 고급 언어로 결측값이다

  • pandas 에서는 NaN => Not a Number 로 표기 된다


1
df
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745
3 방탄소년단 빅히트 남자 1995-12-30 178.0 AB 8073501
4 화사 마마무 RBW 여자 1995-07-23 162.1 A 7650928
5 정국 방탄소년단 빅히트 남자 1997-09-01 178.0 A 5208335
6 민현 뉴이스트 플레디스 남자 1995-08-09 182.3 O 4989792
7 소연 아이들 큐브 여자 1998-08-26 NaN B 4668615
8 방탄소년단 빅히트 남자 1992-12-04 179.2 O 4570308
9 하성운 핫샷 스타크루이엔티 남자 1994-03-22 167.1 A 4036489
10 태연 소녀시대 SM 여자 1989-03-09 NaN A 3918661
11 차은우 아스트로 판타지오 남자 1997-03-30 183.0 B 3506027
12 백호 뉴이스트 플레디스 남자 1995-07-21 175.0 AB 3301654
13 JR 뉴이스트 플레디스 남자 1995-06-08 176.0 O 3274137
14 슈가 방탄소년단 빅히트 남자 1993-03-09 174.0 O 2925442


2. column별 (비)결측값 개수 확인 – info()

info() 로 각 column별의 결측값(NaN) 개수를 쉽게 확인할 수 있다.


1
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 15 entries, 0 to 14
Data columns (total 8 columns):
 #   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
 0   이름       15 non-null     object 
 1   그룹       14 non-null     object 
 2   소속사      15 non-null     object 
 3   성별       15 non-null     object 
 4   생년월일     15 non-null     object 
 5   키        13 non-null     float64
 6   혈액형      15 non-null     object 
 7   브랜드평판지수  15 non-null     int64  
dtypes: float64(1), int64(1), object(6)
memory usage: 1.1+ KB


3. (비)결측값 위치 확인

  • .isna()

  • .isnull()

  • .notna()

  • .notnull()


3-1. 전체 Data

df_name .명령어


(1) 결측값 = True

1
df.isna()

1
df.isnull()
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 False False False False False False False False
1 False False False False False False False False
2 False True False False False False False False
3 False False False False False False False False
4 False False False False False False False False
5 False False False False False False False False
6 False False False False False False False False
7 False False False False False True False False
8 False False False False False False False False
9 False False False False False False False False
10 False False False False False True False False
11 False False False False False False False False
12 False False False False False False False False
13 False False False False False False False False
14 False False False False False False False False

(2) 비결측값 = True

1
df.notna()

1
df.notnull()
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 True True True True True True True True
1 True True True True True True True True
2 True False True True True True True True
3 True True True True True True True True
4 True True True True True True True True
5 True True True True True True True True
6 True True True True True True True True
7 True True True True True False True True
8 True True True True True True True True
9 True True True True True True True True
10 True True True True True False True True
11 True True True True True True True True
12 True True True True True True True True
13 True True True True True True True True
14 True True True True True True True True



3-2. 특정 column

df_name [ ‘col_name’ ] .명령어


(1) 결측값 = True

1
df['그룹'].isna()

1
df['그룹'].isnull()
0     False
1     False
2      True
3     False
4     False
5     False
6     False
7     False
8     False
9     False
10    False
11    False
12    False
13    False
14    False
Name: 그룹, dtype: bool

(2) 비결측값 = True

1
df['그룹'].notna()

1
df['그룹'].notnull()
0      True
1      True
2     False
3      True
4      True
5      True
6      True
7      True
8      True
9      True
10     True
11     True
12     True
13     True
14     True
Name: 그룹, dtype: bool


4. (비)결측값 추출

4-1. 해당 column만 추출

결측값: df_name [ ‘col_name’] [ df_name [ ‘col_name’ ] .isna() / isnull() ]
비결측값: df_name [ ‘col_name’ ] [df_name [ ‘col_name’ ] .notna() / notnull()]


1
df['그룹'][df['그룹'].isna()]
2    NaN
Name: 그룹, dtype: object

1
df['그룹'][df['그룹'].notnull()]
0     방탄소년단
1        빅뱅
3     방탄소년단
4       마마무
5     방탄소년단
6      뉴이스트
7       아이들
8     방탄소년단
9        핫샷
10     소녀시대
11     아스트로
12     뉴이스트
13     뉴이스트
14    방탄소년단
Name: 그룹, dtype: object


4-2. 전체 column 추출

결측값: df_name .loc [df_name [ ‘col_name’ ] .isna() / isnull() ]

비결측값: df_name .loc [df_name ['col_name] .notna() / notnull() ]


1
df.loc[df['그룹'].isna()]
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
2 강다니엘 NaN 커넥트 남자 1996-12-10 180.0 A 8273745

1
df.loc[df['그룹'].notnull()]
이름 그룹 소속사 성별 생년월일 혈액형 브랜드평판지수
0 지민 방탄소년단 빅히트 남자 1995-10-13 173.6 A 10523260
1 지드래곤 빅뱅 YG 남자 1988-08-18 177.0 A 9916947
3 방탄소년단 빅히트 남자 1995-12-30 178.0 AB 8073501
4 화사 마마무 RBW 여자 1995-07-23 162.1 A 7650928
5 정국 방탄소년단 빅히트 남자 1997-09-01 178.0 A 5208335
6 민현 뉴이스트 플레디스 남자 1995-08-09 182.3 O 4989792
7 소연 아이들 큐브 여자 1998-08-26 NaN B 4668615
8 방탄소년단 빅히트 남자 1992-12-04 179.2 O 4570308
9 하성운 핫샷 스타크루이엔티 남자 1994-03-22 167.1 A 4036489
10 태연 소녀시대 SM 여자 1989-03-09 NaN A 3918661
11 차은우 아스트로 판타지오 남자 1997-03-30 183.0 B 3506027
12 백호 뉴이스트 플레디스 남자 1995-07-21 175.0 AB 3301654
13 JR 뉴이스트 플레디스 남자 1995-06-08 176.0 O 3274137
14 슈가 방탄소년단 빅히트 남자 1993-03-09 174.0 O 2925442


4-3. 지정한 column 추출

결측값: df_name .loc [df_name [ ‘na_col_name’ ] .isna() / isnull() , [‘col_name1’, ‘col_name2’, …]]

비결측값: df_name .loc [df_name ['na_col_name] .notna() / notnull() , [‘col_name1’, ‘col_name2’, …]]


1
df.loc[df['그룹'].isna(), ['이름', '소속사']]
이름 소속사
2 강다니엘 커넥트

1
df.loc[df['그룹'].notnull(), ['이름', '소속사']]
이름 소속사
0 지민 빅히트
1 지드래곤 YG
3 빅히트
4 화사 RBW
5 정국 빅히트
6 민현 플레디스
7 소연 큐브
8 빅히트
9 하성운 스타크루이엔티
10 태연 SM
11 차은우 판타지오
12 백호 플레디스
13 JR 플레디스
14 슈가 빅히트