728x90
728x90
🔉 빅데이터 분석을 편리하게 해주는 파이썬 라이브러리인 Pandas에 대해 공부해보자!
데이터가 처음부터 없거나, 데이터 처리 과정 중 데이터가 손실되는 이유로 결측값이 존재할 수 있다.
다양한 이유로 생기는 결측값은 분석과정에서 오류를 범하게 하거나, 잘못된 분석결과를 낼 수 있다.
꼭 read_csv를 한 후(데이터 프레임 생성) 결측치 유무를 확인하는 습관을 가지자!
📝목차
1. 결측 유무 확인
2. 결측값이 존재하는 행, 열 제거
3. 결측값 대체
먼저 사용할 데이터 선언
pandas에서 결측값은 'None' 또는 'NaN'이다.
import pandas as pd
import numpy as np
# list를 이용해서 데이터 프레임 만들기
name_list = ["안유진","가을","레이","장원영","리즈","이서"]
korean_list = [90,85,np.nan,87,85,85]
english_list = [95,85,87,np.nan,74,84]
df = pd.DataFrame({"name": name_list,"korean": korean_list, "english": english_list})
df
output:
1. 결측 유무 확인
- df.isnull()
결측치가 있는 칸은 'True' 출력
df.isnull()
output:
- df.isnull().sum()
df.isnull().sum() # 컬럼별로 결측치 개수 확인
output:
count()를 사용하면 모든 데이터를 세서 5, 5, 5 값이 나오게 된다.
sum() 사용시 True는 1로 , False는 0으로 판단해 다음과 같이 결과가 나온다. df.isnull().sum()은 각 컬럼별 결측치의 개수를 파악할 때 편리하다.
2. 결측값이 존재하는 행, 열 제거
- 결측값이 존재하는 행 제거 : df.dropna() # axis=0(행)이 기본값이다.
df.dropna() # 결측값이 있는 행 제거
output:
- 결측값이 존재하는 열 제거 : df.dropna(axis=1)
df.dropna(axis=1) # 결측값이 있는 열 제거
output:
물론 기존 데이터프레임을 바꾸려면 inplace=True 옵션이나 변수에 대입해 주어야 한다.
df.dropna(axis=1,inplace=True) # 결측값이 있는 열 제거
# 또는
df = df.dropna(axis=1)# 결측값이 있는 열 제거
3. 결측값 대체
결측값 대체를 위해 결측치 추가적으로 넣음.
import pandas as pd
import numpy as np
# list를 이용해서 데이터 프레임 만들기
name_list = ["안유진","가을","레이","장원영","리즈","이서"]
korean_list = [90,85,np.nan,87,85,85]
english_list = [95,85,87,np.nan,np.nan,84]
math_list = [100,95,97,91,np.nan,np.nan]
df = pd.DataFrame({"name": name_list,"korean": korean_list, "english": english_list,"math": math_list})
df
output:
- 특정 값으로 대체하기( fillna(숫자) )
df.fillna(85) # 특정 값으로 대체
output:
- 결측값 앞의 행 값으로 대체하기 (fillna(method = 'ffill'))
df.fillna(method='ffill') # 앞의 행 값으로 대체
output:
- limit 옵션에 값을 주어 최대 몇 번까지 대체할지 결정할 수 있다.
df.fillna(method='ffill', limit =1) # 한 번만 대체
output:
- 결측값 뒤의 행 값으로 대체하기 (fillna(method= 'bfill'))
df.fillna(method='bfill') # 뒤의 행 값으로 대체
output:
6행의 math값이 없어 4,5행 math값은 대체되지 않았다.
- 결측값을 각 컬럼의 평균값으로 대체하기 (fillna(df.mean()))
df.fillna(df.mean()) # 각 컬럼의 평균값으로 대체
output:
728x90
728x90
'Programming > Pandas' 카테고리의 다른 글
[Pandas] 레코드, 컬럼 추가 & 삭제 (append, drop, loc) (0) | 2023.02.15 |
---|---|
[Pandas] 타입 변환(astype(), pd.to_datetime(), pd.to_numeric()) (0) | 2023.02.15 |
[Pandas] 데이터 정렬(sort_values, sort_index) (0) | 2023.02.12 |
[Pandas] 조건에 맞는 데이터 추출 (0) | 2023.02.12 |
[Pandas] 원하는 위치의 데이터 추출(loc, iloc) (0) | 2023.02.12 |