728x90
- f1컬럼~의 결측치는 중앙 값으로 대체하고
- 나머지 결측치가 있는 데이터(행)을 모두 제거하고,
- 앞에서부터 70% 데이터 중 views 컬럼의 3사분위 수에서 1사분위 수를 뺀 값을 구하시오
(단, 데이터 70% 지점은 정수형(int) 변환)
# 결측치가 얼마나 있는지 확인
# df.isna().sum()
#1
df['f1'] = df['f1'].fillna(df['f1'].median())
#2
# df.shape
df = df.dropna(axis=0)
# df.shape
#3
df = df[ :int(len(df) * 0.7)]
# print(len(df))
answer = df['views'].quantile(.75)-df['views'].quantile(.25)
print(answer)
데이터의 N%지점 구하는 법: 만약 50%라면
df[:int(len(df) * 0.5)]
3분위수, 2분위수, 1분위수 구하는 법
df['컬럼명'].quantile(.75) # 3분위수
df['컬럼명'].quantile(.5) # 2분위수
df['컬럼명'].quantile(.25) # 1분위수
- 주어진 데이터에서 결측치가 30% 이상인 컬럼을 A, 결측치가 30% 미만, 20% 이상인 컬럼을 B라고 가정하자.
- A에 해당하는 컬럼은 결측치가 있는 데이터(행)를 삭제하시오.
- B에 해당하는 컬럼은 결측치를 최빈값으로 대체하시오.
- 'f3'컬럼의 'gold' 값을 가진 데이터 수를 구하시오
#1
# df.isna().sum()
# print(len(df) * 0.3)
# A = f1, B = f3
#2
#print(df.shape)
df = df.dropna(subset=['f1'])
#print(df.shape)
#3
f3_mode = df['f3'].mode()[0]
#print(f3_mode)
df['f3'] = df['f3'].fillna(f3_mode)
#4
cond = df['f3'] == 'gold'
print(len(df[cond]))
특정 컬럼에 결측치가 있는 행 삭제하기
df = df.dropna(subset=['컬럼명'])
결측치를 최빈값으로 대체할 땐 꼭 [0]을 적어줘야한다. 최빈값이 여러 개가 있을 경우도 있어서!!!!!!!!!!!!
f3_mode = df['f3'].mode[0]
df['f3'] = df['f3'].fillna(f3_mode)
- views 컬럼에 결측치가 있는 데이터(행)을 삭제하고,
- f3 컬럼의 결측치는 0, silver는 1, gold는 2, vip는 3 으로 변환한 후 총 합을 정수형으로 출력하시오
# df.isna().sum()
#1
# print(df.shape)
df = df.dropna(subset=['views'])
# print(df.shape)
#2
df['f3'] = df['f3'].fillna(0)
df[df['f3'] == 'silver'] = 1
df[df['f3'] == 'gold'] = 2
df[df['f3'] == 'vip'] = 3
print(sum(df['f3']))
값을 대체하고 총 합을 정수형으로 출력하는 방법
- 조건을 사용해서 데이터를 정수형으로 바꿔준 뒤, sum으로 계산한다.
- numpy를 사용해서 replace 한 뒤, sum으로 계산한다.
- 딕셔너리를 사용해서 데이터를 바꿔준뒤, sum으로 계산한다.
#1
df['f3'] = df['f3'].fillna(0)
df[df['f3'] == 'silver'] = 1
df[df['f3'] == 'gold'] = 2
df[df['f3'] == 'vip'] = 3
#2
import numpy as np
df['f3'] = df['f3'].replace(np.nan, 0).replace('silver',1).replace('gold',2).replace('vip',3)
#3
dict_list = {np.nan:0, 'silver':1, 'gold':2, 'vip':3}
df['f3'] = df['f3'].map(dict_list)
- 주어진 데이터에서 자료형(type)이 object인 컬럼은 삭제하고, 결측치는 0으로 대체한다.
- 행 단위로 합한 다음 그 값이 3000보다 큰 값의 데이터 수를 구하시오 ('age', 'f1', 'f2', 'f5', 'views'의 각 행별 합)
#1
cols = df.select_dtypes(include='object').columns
df = df.drop(cols, axis=1)
df = df.fillna(0)
# cols = df.select_dtypes(exclude='object').columns
# df = df[cols]
#2
df = df.T
# print(sum(df.sum() > 3000))
df = df.sum()
print(len(df[df > 3000]))
데이터에서 자료형(type)이 object인 컬럼 삭제하는 법은 include와 exclude 2가지가 있다.
select_dtypes에서 include를 하면 drop해야하고, exclude하면 해당 컬럼들만 따로 저장하면 된다.
# include 사용해서 object인 컬럼 drop
cols = df.select_dtypes(include='object')
df.drop(cols, axis=1)
# exclude 사용해서 object 아닌 컬럼만 남기기
cols = df.select_dtypes(exclude='object')
df = df[cols]
행 단위로 합하려면, 전치행렬 사용하면 된다.
# 전치행렬
df = df.T
# 행 단위로 합하기
sum(df.sum())
- 데이터에서 IQR을 활용해 views 컬럼의 이상치를 찾고,
- 이상치 데이터의 수를 구하시오
#1
Q3 = df['views'].quantile(.75)
Q1 = df['views'].quantile(.25)
IQR = Q3 - Q1
cond1 = Q1 - 1.5*IQR
cond2 = Q3 + 1.5*IQR
#2
print(sum(df['views'] < cond1) + sum(df['views'] > cond2))
IQR 방식으로 이상치를 제거한다는 것은

- Q3에서 IQR * 1.5를 더한 값을 최댓값(Q3+IQR*1.5)
- Q1에서 IQR * 1.5를 뺀 값을 최솟값(Q1-IQR*1.5)으로 지정하고
최댓값보다 크거나 최솟값보다 작은 값을 이상치로 간주하여 제거하는 것을 말한다.

- 'age' 컬럼의 이상치(소수점 나이와 음수나이, 0포함)를 제거하고
- 제거 전 후의 views 컬럼 표준편차를 더하시오 (최종 결과 값은 소수 둘째자리까지 출력, 셋째자리에서 반올림)
#2
# 제거 전의 views 표준편차
std1 = df['views'].std()
#1
# 0 보다 작으면(음수)
cond1 = df['age'] <= 0
# print(df.shape)
df = df[~cond1]
# rint(df.shape)
# 소수점 나이 제거
cond2 = df['age'] == round(df['age'], 0)
df = df[cond2]
#2
# 제거 후의 views 표준편차
std2 = df['views'].std()
print(round(std1+std2, 2))
소수점 값을 제거할 땐, 반올림했을 때의 값과 원본 값이 같은지 다른지로 판별할 수 있다.
cond2 = df['age'] == round(df['age'], 0)
df = df[cond2]
조건의 반대를 적용시키고 싶을 땐 조건 변수 앞에 '~'를 붙인다.
# 0 보다 작으면(음수)
cond1 = df['age'] <= 0
# print(df.shape)
df = df[~cond1] # 0보다 큰 값들만 저장하고 싶어 ~cond1
# rint(df.shape)728x90
'Data > 빅데이터분석기사' 카테고리의 다른 글
| [빅데이터분석기사] 작업형2 머신러닝 - 데이터 전처리(결측치, 이상치) (0) | 2025.06.15 |
|---|---|
| [빅데이터분석기사] 작업형1 모의문제3+4 (0) | 2025.06.13 |
| [빅데이터분석기사] 판다스7-시계열데이터2 (0) | 2025.06.12 |
| [빅데이터분석기사] 판다스6 - 시계열 데이터1 (0) | 2025.06.11 |
| [빅데이터분석기사] 판다스5 - 그룹핑, 병합, 피벗테이블 (1) | 2025.06.10 |