결측값 비율 확인 및 시각화 함수
import pandas as pd
import matplotlib.pyplot as plt
def missing_per(df):
null_data = [] # 빈 리스트로 시작하여 각 컬럼의 결측값 정보를 저장합니다.
for col in df.columns:
null_rate = df[col].isna().sum() / len(df) * 100
if null_rate > 0:
print('{} null rate: {}%'.format(col, round(null_rate, 2)))
# null_data에 딕셔너리 형태로 추가
null_data.append({'column': col, 'null_rate': null_rate})
# DataFrame 생성
df_null = pd.DataFrame(null_data)
# 막대 그래프 생성
plt.figure(figsize=(10, 6))
plt.bar(df_null['column'], df_null['null_rate'], color='skyblue')
# 그래프 꾸미기
plt.title('Null Rate by Column', fontsize=16)
plt.xlabel('Column', fontsize=14)
plt.ylabel('Null Rate (%)', fontsize=14)
plt.xticks(rotation=45)
plt.ylim(0, max(df_null['null_rate']) + 5) # Y축 범위 설정
# 각 막대 위에 비율 표시
for index, value in enumerate(df_null['null_rate']):
plt.text(index, value + 0.5, f'{round(value, 2)}%', ha='center', va='bottom')
plt.tight_layout()
plt.show()
missing_per(df)
결측치 제거 - 열 제거하기
# 결측치 제거 - 열 전체 제거
df = df.drop('Unnamed: 4', axis = 1)
컬럼별 결측치 확인
df.isnull().sum()
df.isna().sum()
# 결측값
for i in df.columns:
null_rate = df[i].isna().sum() / len(df) * 100
if null_rate > 0:
print('{} null rate: {}%'.format(i, round(null_rate, 2)))
결측치가 있는 행 제거
df = df.dropna(inplace = True)
특정 컬럼에 해당하는 결측치 행 제거
df = df.dropna(subset=['column']).reset_index(drop=True)
결측값 -> 최빈값 대체
# 결측치가 있는 Interaction type 컬럼을 최빈값으로 대체하기 위해, mode() 함수 사용
df['Interaction type'].mode()
# mode 함수의 output은 시리즈
# 따라서 [0]을 통해 시리즈 중 단일값을 가져온다
df = df['Interaction type'].fillna(df['Interaction type'].mode()[0])
# 연산 후 인덱스 재설정
df = df.reset_index()
결측값 -> 평균, 중앙값 대체
# Shipping Weight 컬럼의 값 {10.7 pounds, 8.9 pounds .....}
# 문자열 분리
df['sw'] = df['Shipping Weight'].str.split().str[0]
# string to float, 에러 무시
# "."을 처리하기 위해 에러 무시 적용
df['sw'] = pd.to_numeric(df['sw'], errors = 'coerce')
# 평균값 대체
df['sw'] = df['sw'].fillna(df['sw'].mean())
# 중간값 대체
df['sw'] = df['sw'].fillna(df['sw'].median())
# 바로 위 값으로 대체
df['sw'] = df['sw'].fillna(method = 'ffill')
# 바로 아래 값으로 대체
df['sw'] = df['sw'].fillna(method = 'bfill')
결측치 대체_group by
# 사전 데이터 확인
df.groupby('Category')['sw'].median()
# groupby 데이터를 데이터프레임의 컬럼으로 추가하기 위해 transform() 함수 사용
df['sw'] = df['sw'].fillna(df.groupby('Category')['sw'].transform('median'))
'[업무 지식] > Python' 카테고리의 다른 글
[2차원 배열 저장] for문 (0) | 2024.11.21 |
---|---|
[이상치 처리] Python (0) | 2024.11.07 |
[seaborn] 데이터 시각화 (0) | 2024.10.31 |
[matplotlib] 데이터시각화 (0) | 2024.10.31 |
[10분 판다스] python 기초 (0) | 2024.10.31 |