본문 바로가기
데이터분석/Pandas

[Python] Pandas 12 _ na

by nemonemonemo 2025. 8. 25.

지난 시간까지 한 일

: 데이터를 어떻게 수집할까!!

  • 인터넷을 통해서 수집!!! → API, 웹 사이트 etc
  • 특정 파일로 존재

⇒ 수집한 데이터들을 바탕으로 어떻게 활용할지에 대해서 오늘 공부할 것


데이터 수집하고 체크

→ 결측치 잘 확인해야함

  • 공식 : NaN ⇒ 공식적인 결측값
  • 기타 : nan, “”, None ⇒ 이런 값들이 이상하게 있을 수 있음
  1. 빵꾸난 데이터가 있다면
    • EDA 처리할 때는 그렇게 큰 이슈는 아님
    • → but ML 모델에서는 꼭 처리를 해야함
      • 처리 방법 1 ) 누락 된 것을 지우자
        1. 경우에 따라서 샘플의 수가 줄어들 수 있음
        2. 경우에 따라서 속서의 수가 줄어들 수 있음
      • 처리 방법 2 ) 누락된 것을 채우자
        • fillna
          • 어떻게 채울까에 대한 정답은 없음
          • 분석자가 주관적으로 처리해야하는 영역
            1. 1개의 대표값을 사용하는 경우 → 평균, 중앙값
            2. 유사한 데이터를 보고 추정하는 경우
            3. 기존 데이터를 바탕으로 모델링을 통해 추정
            ⇒ 정해진 답은 없다…! (왜 그렇게 채웠는지에 대한 근거가 항상 필요 이런 것들을 할 때 WHY를 달고 다녀야함)

데이터 분석 프로세스 ⇒ 항상 why 달고다녀야함

  • 숫자라고 하는 객관성을 가장한 엄청난 주관성을 가짐
  • 분석자의 끌고가는 논리가 매우 중요함

drop

  • 특정한 줄(가로, 세로)를 지울 때
  • → 기준 ⇒ 내가 만든 틀 (가로 인덱스, 컬럼명)

dropna

  • 명시적인 NaN인 값으로 지울 때
  • → 기준 ⇒ 값
from numpy import nan as NA
import pandas as pd

# 이 데이터는 설문 문항이 3개인 설문 결과!!!
# ==> 4명한테 설문지를 돌리고 받았다!!!
data = pd.DataFrame(
    data =[
               [ 1, 6.5, 3],
                [1, NA,NA],
               [NA,NA,NA],
               [NA,6.5,3]
          ]
)
data
'''
	  0	  1	  2
0	1.0	6.5	3.0
1	1.0	NaN	NaN
2	NaN	NaN	NaN
3	NaN	6.5	3.0

'''

data.dropna()
# --> 가로 줄에 대해서 (샘플단위 기준) "모든 속성/컬럼"이 살아있는 경우만 살림
#     [모든 설문 문항에 응답한 경우만 인정하겠다]
#장점 : 샘플이 모든 속성들을 다 가지고 있다
#단점 : 샘플의 수가 확 줄어들 수 있음
'''
	  0	  1	  2
0	1.0	6.5	3.0

'''

 data
 '''
 	  0	  1	  2
0	1.0	6.5	3.0
1	1.0	NaN	NaN
2	NaN	NaN	NaN
3	NaN	6.5	3.0

 '''
 
 
 data.dropna(axis = 1)
 '''
 0
 1
 2
 3
 '''

dropna

  • axis
    • 가로줄/세로줄 기준으로 “모든값”이 있는지 체크
    • 기준은 공식적인 NaN으로 된 애들이 기준
    • how
      • all
        • 완전히 모든 그 줄의 데이터가 NaN인 경우만 삭제하자
    • tresh
      • 정상적인 데이터가 살아있는 기준 수
data.dropna(axis = 0, how = "all")
# 가로줄 입장에서 모든 세로 속성에 대한 것이 NaN인 것들을 삭제
'''
	  0  	1	  2
0	1.0	6.5	3.0
1	1.0	NaN	NaN
3	NaN	6.5	3.0

'''

data.dropna(axis=0, thresh = 1)
#--> 가로줄 기준
#--> 그 가로줄에서 모든 세로(컬럼)값이 정상적인 값이 1개 이상이면 샘플로 살리자
#=> 여러 문항 중 1문항이라도 답하신 분들은 샘플로 인정하겠다
'''
	  0	  1	  2
0	1.0	6.5	3.0
1	1.0	NaN	NaN
3	NaN	6.5	3.0

'''

data.dropna(axis=0, thresh = 2)
#-> 가로줄 기준으로
#-> 정상적인 값 2개 이상 제출한 가로줄은 살리자
# => 2개 답한 사람부터 샘플로 인정
'''
	  0	  1	  2
0	1.0	6.5	3.0
3	NaN	6.5	3.0

'''

채우자 : fillna → NaN 명시적인 친구들은 어떻게 채울까

⇒ *** ML 내에서는 nan 값이 있으면 안 됨 → 에러남

data
'''
	  0	  1  	2
0	1.0	6.5	3.0
1	1.0	NaN	NaN
2	NaN	NaN	NaN
3	NaN	6.5	3.0
'''

data.fillna(99)
'''
	  0	  1	  2
0	1.0	 6.5	3.0
1	1.0	 99.0	99.0
2	99.0 99.0	99.0
3	99.0 6.5	3.0

'''

data.fillna( 0)
'''
	  0	  1	  2
0	1.0	6.5	3.0
1	1.0	0.0	0.0
2	0.0	0.0	0.0
3	0.0	6.5	3.0

'''

→ 1번 컬럼에 대해서 누락된 값이 있다면 : 0으로 채우자(예 : 속도) → 2번 컬럼에 대해서 누락된 값이 있다면 : 99로 채우자(예 : 무응답)

# 컬럼별로 결측치를 다르게 채워주세요~~~
# ==> dict 기반
data.fillna( {0:0, 1:99})
'''
    0	   1	  2
0	1.0	 6.5	 3.0
1	1.0	 99.0  NaN
2	0.0	 99.0  NaN
3	0.0	 6.5	 3.0

'''

<aside>

정리

결측 데이터 처리

  • 지우자
    • drop, dropna etc…
  • 채우자
    • fillna ( 어떤 값(분석자의 몫) )

++전체 데이터를 돌아가면서 처리할 수도 있음 Gap 구하는 스타일로

+++ lambda + apply 이용하는 방식도

</aside>

'데이터분석 > Pandas' 카테고리의 다른 글

[Python] Pandas 14 _ groupby  (3) 2025.08.25
[Python] Pandas 13 _ pivot  (1) 2025.08.25
Selenium 02 _ dart_selenium  (0) 2025.08.22
Selenium 01 _ selenium 설치 및 실행  (0) 2025.08.22
[Python] Pandas 11 _ pandas_m&a  (5) 2025.08.21