[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.