Post

[pandas] 05. 결측값(NaN) 처리, 06. 타입 변환

[pandas] 05. 결측값(NaN) 처리, 06. 타입 변환

05. [Pandas] 데이터 가공, 결측값(NaN) 처리

결측값 확인

1
2
# info()에서 확인 가능
df.info()

데이터프레임.isna()

  • 결측값(missing value)을 True로 반환
    1
    
    df.isna()
    

각 컬럼마다의 결측치 합

1
df.isna().sum # 결측치가 True(1)로 반환되기 때문에 sum 하면 결측치 개수 확인 가능

해당 컬럼에서 NaN값 찾기

1
df["Age"].isna()

Age가 결측치(NaN)인 사람의 모든 정보 확인

1
2
# loc[] : 해당 조건을 갖고 있는 행들 선택
df.loc[df["Age"].isna()]

데이터프레임.notna()

  • NaN이 아닌 것 찾기 (거의 안 씀)
    1
    
    df.notna()
    

결측값 제거

df.dropna()

1
2
# nan이 1개라도 포함되어 있으면 행 삭제
df.dropna() # 기본은 axis = 1

how 옵션을 사용하여 NaN의 포함 여부 설정 가능

  • how = “any” -> 1개라도 들어 있으면 모두 지우기
  • how = “all” -> 모든 데이터가 NaN이면 지우기
    1
    
    df.dropna(how = "all") # 모든 컬럼의 데이터가 NaN인 경우 삭제 
    

선택한 컬럼 중 NaN이 포함되어 있으면 지우기

1
2
# Cabin과 Age중에 하나라도 Nan이 있으면 행 삭제 
df.dropna(subset = ["Cabin", "Age"])

결측값 채우기(대치)

df.fillna()

숫자로 채우기

1
2
# 결측값을 -1로 채움 (.tail()은 마지막 5개 데이터만 출력)
df.fillna(-1).tail()

연산값으로 채우기

1
2
3
# 나이의 평균 값으로 결측값 채우기
age_mean = df.["Age"].mean()
df["age_fillna"] = df.fillna(age_mean) # age_fillna라는 Age의 nan값이 평균 값으로 채워진 새로운 컬럼 추가

이전/이후 행의 값으로 채우기

1
2
df.fillna(method = "fill") # 이전값으로 채우기
df.fillna(method = "bfill") # 이후값으로 채우기

06. 데이터 가공, 타입 변환

타입 확인

df.dtypes

1
df.dtypes # int64 자료형만이 머신러닝 가능

특정 타입을 가진 컬럼만 추출

1
df.select_dtypes("int") # object, float ,,,
  • object 타입은 모든 타입의 최상위 클래스
  • pandas에서는 숫자가 아닌 type들을 모두 object처리

    타입 변환

  • 타입 변환을 하기 위해선 각각의 컬럼이 어떤의미를 갖는지 정확히 파악해야함.

    df.astype(바꿀 자료형)

    컬럼의 데이터타입 바꾸기

    1
    2
    
    df["PassengerId"].astype(str) # 문자열 타입으로 전환
    df["PassengerId"] = df["PassengerId"].astype(str) # 실제 데이터에 타입 변환 적용
    

    NaN값이 포함된 데이터의 타입 변환

  • 숫자형 시리즈에 NaN값이 들어 있으면 float으로 처리함.
  • ex) 나이 컬럼에서 NaN이 있으면 나이도 float처리
  • NaN 값이 있는 데이터는 타입 변환 불가능!!
1
2
# NaN값 처리하기
df["Age"] = df["Age"].fillna(-1).astype(int) # 결측값에 -1 채운 후에 타입 변환

타입 변환 후 다시 NaN값 넣기

1
2
3
import numpy as np # numpy를 통해 가능 

df["Age"] = df["Age"].fillna(-1).astype(int).replace( -1, np.nan)
This post is licensed under CC BY 4.0 by the author.