작성
·
3
0
문제
f1컬럼의 결측치는 중앙 값으로 대체하고
나머지 결측치가 있는 데이터(행)을 모두 제거하고,
앞에서부터 70% 데이터 중 views 컬럼의 3사분위 수에서 1사분위 수를 뺀 값을 구하시오
(단, 데이터 70% 지점은 정수형(int) 변환)
내 해답
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p1/members.csv")
df
df['f1'] = df['f1'].fillna(df['f1'].median()) #결측치 중앙값으로 대체
df = df.dropna() #나머지 결측치가 있는 데이터(행)을 모두 제거
df = df.loc[:int(len(df) * 0.7)] #앞에서부터 70% 데이터. loc로 함 (인덱스 명 0부터 시작하는거 df로 확인)
ans1 = df['views'].quantile(.75) - df['views'].quantile(.25) #views 컬럼의 3사분위 수에서 1사분위 수를 뺀 값
print(ans1)
결과 : 3662
해답
import pandas as pd
df = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/main/p1/members.csv")
# df = pd.read_csv("members.csv")
df['f1'] = df['f1'].fillna(df['f1'].median())
# print(df.isnull().sum())
# print(df.shape)
df = df.dropna()
# print(df.shape)
df = df[:int(len(df) * 0.7)]
r1 = df['views'].quantile(.75)
r2 = df['views'].quantile(.25)
print(r1 - r2)
내 코드에서 문제가 된 부분
df = df.loc[:int(len(df) * 0.7)]
loc 대신 iloc 를 쓰면 정답과 같은 답이 나오는걸 확인했는데
문제는 해설처럼 %70 번째를 포함하려면 loc 를 쓰는게 맞는거 아닌가 해서요
iloc 는 iloc[:n] 을 하면 n-1번 인덱스 까지만 포함하는거니까요
답변