📌
#####################################
### 데이터 전처리 : 원본데이터를 원하는 형태로 변경하는 과정
# innull, notnull, dropan, fillna
import seaborn as sns
df = sns.load_dataset("titanic")
df.info()
# deck 컬럼의 값의 종류 출력
df.deck.unique()

# deck 컬럼의 값의 건수 출력
df.deck.value_counts() # 결측값 제외한 건수

# 결측값을 포함한 값의 건수
df.deck.value_counts(dropna=False)
df.deck.head()

#isnull() : 결측값? 결측값인 경우 True, 일반값:False
df.deck.head()
#notnull() : 결측값아님? 결측값인 경우 False, 일반값:True
df.deck.head().notnull()

# 결측값의 갯수 조회
df.isnull().sum() # 컬럼별 결측값 갯수
df.isnull().sum(axis=0) # 행을 기준으로 결측값의 컬럼별 갯수 조회
df.isnull().sum(axis=1) # 열을 기준으로 결측값의 컬럼별 갯수 조회


# 결측값이 아닌 갯수 조회
df.notnull().sum()
df.notnull().sum(axis=0) # 행을 기준으로 컬럼별 결측값이 아닌 갯수 조회
df.notnull().sum(axis=1) # 열을 기준으로 컬럼별 결측값이 아닌 갯수 조회


# dropna : 결측값 제거
# inplace=True 있어야 자체변경 가능.
# 결측값이 500개 이상인 컬럼 제거하기
# thresh=500 : 결측값이 500개 이상인 경우
df_tresh = df.dropna(axis=1, thresh=500)
df_tresh.info()
df.info()

# 결측값을 가진 행을 제거
# subset=["age"] : 컬럼 설정.
# how = 'any'/'all' : 한개만 결측값/ 모든값이 결측값
# aixs=0 : 행
df_age = df.dropna(subset=["age"], how='any', axis=0)
df_age.info()

# fillna : 결측값을 다른값으로 치환
# inplace=True가 있어야 자체 객체 변경
#1. age 컬럼의 값이 결측값인 경우 평균 나이로 변경하기
# 1. age 컬럼의 평균 나이 조회하기
#1
age_mean = df["age"].mean()
age_mean
#2
age_mean = df.mean()["age"]
age_mean

# 치환하기
df["age"].fillna(age_mean,inplace=True)
df.info()

#2. embark_town 컬럼의 결측값은 빈도수가 가장 많은 데이터로 치환하기
# 1. embark_town 중 가장 건수가 많은 값을 조회하기
#1 value_counts() 함수 결과의 첫번째 인덱스 값
most_freq = df["embark_town"].value_counts().index[0]
most_freq
#2 value_counts() 함수 결과의 가장 큰 값의 인덱스값
most_freq = df["embark_town"].value_counts().idxmax()
most_freq


# embark_town 컬럼의 결측값에 most_freq 값을 치환하기
# 1. 결측값의 인덱스 조회
df[df["embark_town"].isnull()] # 61번과 829번이 null
df.iloc[[61,829]]["embark_town"] # 결측값 확인
# 2. 치환하기
df["embark_town"].fillna(most_freq,inplace=True) # 결측값 수정
df.iloc[[61,829]]["embark_town"] # 결측값 변경 확인

#embarked 컬럼을 앞의 값으로 치환하기
#1.embarked 컬럼의 값이 결측값인 레코드 조회하기
df[df["embarked"].isnull()] # 61,829
df.iloc[[61,829]]["embarked"] # 61,829
# 61, 829 앞의 데이터 조회
df.iloc[[61,829]]["embarked"] #61 : C <= 61번은 C 로
df.iloc[[61,829]]["embarked"] #829 : Q <= 829번은 Q 로
#앞의 데이터로 치환하기
# method="ffill" : 앞의 데이터로 치환
# method="bfill" : 뒤의 데이터로 치환
# method="backfill" : 뒤의 데이터로 치환
df["embarked"].fillna(method="ffill", inplace=True)
df["embarked"][58:65] #61:C
df["embarked"][825:831] #829:Q

'수업(국비지원) > Python' 카테고리의 다른 글
| [Python] 범주형 데이터1 (0) | 2023.04.25 |
|---|---|
| [Python] 중복된 데이터 처리 (0) | 2023.04.25 |
| [Python] 빅데이터 분석 예제 (0) | 2023.04.25 |
| [Python] numpy 연산 (0) | 2023.04.25 |
| [Python] numpy 행렬 (0) | 2023.04.25 |