1. bigmart_train.csv 파일을 읽고
df = pd.read_csv('bigmart_train.csv')
df.info()
df.info()['Non-Null Count']
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8523 entries, 0 to 8522
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Item_Identifier 8523 non-null object
1 Item_Weight 7060 non-null float64
2 Item_Fat_Content 8523 non-null object
3 Item_Visibility 8523 non-null float64
4 Item_Type 8523 non-null object
5 Item_MRP 8523 non-null float64
6 Outlet_Identifier 8523 non-null object
7 Outlet_Establishment_Year 8523 non-null int64
8 Outlet_Size 6113 non-null object
9 Outlet_Location_Type 8523 non-null object
10 Outlet_Type 8523 non-null object
11 Item_Outlet_Sales 8523 non-null float64
dtypes: float64(4), int64(1), object(7)
memory usage: 799.2+ KB
1) Item_Weight의 결측치를 아이템코드별 Item_Weight의 평균으로 대치
(단, 아이템코드는 Item_Identifier 컬럼의 앞 3자리)
[ 내 답변 ]
df.isnull().sum()
df.info()['Non-Null Count']
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 8523 entries, 0 to 8522
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Item_Identifier 8523 non-null object
1 Item_Weight 7060 non-null float64
2 Item_Fat_Content 8523 non-null object
3 Item_Visibility 8523 non-null float64
4 Item_Type 8523 non-null object
5 Item_MRP 8523 non-null float64
6 Outlet_Identifier 8523 non-null object
7 Outlet_Establishment_Year 8523 non-null int64
8 Outlet_Size 6113 non-null object
9 Outlet_Location_Type 8523 non-null object
10 Outlet_Type 8523 non-null object
11 Item_Outlet_Sales 8523 non-null float64
dtypes: float64(4), int64(1), object(7)
memory usage: 799.2+ KB
# 1) Item_Weight의 결측치를 아이템코드별 Item_Weight의 평균으로 대치
# (단, 아이템코드는 Item_Identifier 컬럼의 앞에 3자리)
df.loc[df['Item_Weight'].isnull(), :]
# 아이템코드 추출
f1 = lambda x : x[0:3]
df['Item_code'] = df['Item_Identifier'].map(f1)
# 아이템코드별 Item_Weight 평균 구하기
df_mean = df.groupby('Item_code')['Item_Weight'].transform('mean')
# 결측치 대치
df['Item_Weight'] = df['Item_Weight'].fillna(df_mean)
# 최종확인
df.isnull().sum()
df
df.isnull().sum()
Out[537]:
Item_Identifier 0
Item_Weight 0
Item_Fat_Content 0
Item_Visibility 0
Item_Type 0
Item_MRP 0
Outlet_Identifier 0
Outlet_Establishment_Year 0
Outlet_Size 2410
Outlet_Location_Type 0
Outlet_Type 0
Item_Outlet_Sales 0
Item_code 0
[ 문제풀이 ]
groups = df['Item_Identifier'].map(lambda x : x[:3])
vmean = df.groupby(groups)['Item_Weight'].transform('mean')
df['Item_Weight'].fillna(vmean).isnull().any()
df['Item_Weight'] = df['Item_Weight'].fillna(vmean)
2) Outlet_Size 컬럼값이 결측치인 행을 제외하기 전의 Item_MRP의 평균과 제거후의 Iteme_MRP 평균의 차이에 대한 절댓값을 소숫점 둘째자리까지 반올림하여 출력
[ 내 답변 ]
# 제거 전 평균
mean1 = df['Item_MRP'].mean()
# 결측치가 있는 행 제외
df2 = df.dropna(subset = ['Outlet_Size'])
mean2 = df2['Item_MRP'].mean()
# 평균의 차이에 대한 절댓값 출력
round(abs(mean1 - mean2), 2)
round(abs(mean1 - mean2), 2)
Out[559]: np.float64(0.26)
[ 문제풀이 ]
bmean = df['Item_MRP'].mean()
df = df.dropna(subset=['Outlet_Size'])
amean = df['Item_MRP'].mean()
round(abs(amean - bmean), 2)
'아이티윌_데이터 분석 55기 > 문제풀이_Python' 카테고리의 다른 글
| #8-2. 8일차 퀴즈에 대한 문제풀이 (0) | 2026.05.20 |
|---|---|
| #7-2. 7일차 퀴즈에 대한 문제풀이 (0) | 2026.05.20 |
| #4-2. 4일차 퀴즈에 대한 문제풀이 (0) | 2026.05.14 |
| #3-2. 3일차 퀴즈에 대한 문제풀이 (+ 다양한 print 방법) (0) | 2026.05.13 |
| #2-2. 2일차 퀴즈에 대한 문제풀이 (0) | 2026.05.12 |