아이티윌_데이터 분석 55기/문제풀이_Python

#2-2. 2일차 퀴즈에 대한 문제풀이

ecosso 2026. 5. 12. 17:02

## 연습문제
1. 연령별실업율_40-49세.csv 파일을 읽고
df1 = pd.read_csv('연령별실업율_40-49세.csv', encoding='cp949')

# 1) 각 연도별 실업율 평균 출력
df1.mean()

# 2) 각 연도별 상반기와 하반기 실업율 평균의 차이를 절댓값으로 나타낸 뒤 이 값이 가장 큰 연도를 출력
abs(1.2)


# 3) 2014년 -> 2014로 변경

# 4) 모든 컬럼명에서 '년' 제거

# 5) 실업율을 소수점 둘째자리까지 표현

 

더보기

[ 내 답변 ]
1. 연령별실업율_40-49세.csv 파일을 읽고
df1 = pd.read_csv('연령별실업율_40-49세.csv', encoding='cp949')

# 1) 각 연도별 실업율 평균 출력
df1.mean()

 

df2 = df1.iloc[:, 1:]
df2.mean()

df2.mean()
Out  [54]: 
2014년    3.500000
2015년    3.000000
2016년    2.000000
2017년    2.191667
2018년    2.316667
dtype: float64


# 2) 각 연도별 상반기와 하반기 실업율 평균의 차이를 절댓값으로 나타낸 뒤 이 값이 가장 큰 연도를 출력
abs(1.2)
상반기 = df1.loc[df1['월'] <= 6].iloc[:, 1:]
하반기 = df1.loc[df1['월'] > 7].iloc[:, 1:]

abstwo = abs(상반기.mean() - 하반기.mean())
abstwo.max()
abstwo[abstwo == abstwo.max()] 

abstwo[abstwo == abstwo.max()]
Out  [76]: 
2015년    1.13
dtype: float64


# 3) 2014년 -> 2014로 변경
df1.rename({'2014년':'2014'}, axis=1)

df1.rename({'2014년':'2014'}, axis=1)
Out  [83]: 
     월  2014  2015년  2016년  2017년  2018년
0    1   4.0    4.3    2.4    2.0    2.2
1    2   4.5    4.5    2.5    2.1    2.6
2    3   3.9    4.1    2.5    2.2    2.8
3    4   3.6    3.3    2.1    2.1    2.3
4    5   3.4    2.7    2.0    2.2    2.2
5    6   3.3    2.4    1.8    2.2    2.0
6    7   3.1    2.6    1.8    2.2    2.3
7    8   3.2    2.9    2.1    2.5    2.6
8    9   3.2    2.5    1.8    2.2    2.3
9   10   3.1    2.3    1.7    2.2    2.1
10  11   3.2    2.2    1.6    2.2    2.2
11  12   3.5    2.2    1.7    2.2    2.2


# 4) 모든 컬럼명에서 '년' 제거
df1.columns[:]

f1 = lambda x : x.replace('년', '')
newindex = df1.columns[:].map(f1)

df1.columns = df1.columns[:].map(f1)
df1

df1
Out  [111]: 
     월  2014  2015  2016  2017  2018
0    1   4.0   4.3   2.4   2.0   2.2
1    2   4.5   4.5   2.5   2.1   2.6
2    3   3.9   4.1   2.5   2.2   2.8
3    4   3.6   3.3   2.1   2.1   2.3
4    5   3.4   2.7   2.0   2.2   2.2
5    6   3.3   2.4   1.8   2.2   2.0
6    7   3.1   2.6   1.8   2.2   2.3
7    8   3.2   2.9   2.1   2.5   2.6
8    9   3.2   2.5   1.8   2.2   2.3
9   10   3.1   2.3   1.7   2.2   2.1
10  11   3.2   2.2   1.6   2.2   2.2
11  12   3.5   2.2   1.7   2.2   2.2


# 5) 실업율을 소수점 둘째자리까지 표현

f2 = lambda x : '%.2f' % x
df1.applymap(f2)

df1.applymap(f2)
<stdin>:1: FutureWarning: DataFrame.applymap has been deprecated. Use DataFrame.map instead.
Out  [119]: 
        월  2014  2015  2016  2017  2018
0    1.00  4.00  4.30  2.40  2.00  2.20
1    2.00  4.50  4.50  2.50  2.10  2.60
2    3.00  3.90  4.10  2.50  2.20  2.80
3    4.00  3.60  3.30  2.10  2.10  2.30
4    5.00  3.40  2.70  2.00  2.20  2.20
5    6.00  3.30  2.40  1.80  2.20  2.00
6    7.00  3.10  2.60  1.80  2.20  2.30
7    8.00  3.20  2.90  2.10  2.50  2.60
8    9.00  3.20  2.50  1.80  2.20  2.30
9   10.00  3.10  2.30  1.70  2.20  2.10
10  11.00  3.20  2.20  1.60  2.20  2.20
11  12.00  3.50  2.20  1.70  2.20  2.20

 

[ 문제풀이 ]

1) 각 연도별 실업율 평균 출력
result1 = df1.iloc[:, 1:].mean()
print(result1)

2) 각 연도별 상반기와 하반기 실업율 평균의 차이를 절댓값으로 나타낸 뒤 이 값이 가장 큰 연도를 출력
vmean1 = df1.iloc[:6, 1:].mean()
vmean2 = df1.iloc[6:, 1:].mean()

print(abs(vmean1 - vmean2))
print(2015)

3) 2014년 -> 2014로 변경
df1.rename({'2014년' : '2014'}, axis = 1)

4) 모든 컬럼명에서 '년' 제거
f1 = lambda x : x.replace('년','')
df1.columns = df1.columns.map(f1)
df1

5) 실업율을 소숫점 둘째자리까지 표현
f2 = lambda x : '%.2f'%x
df1.iloc[:,1:] = df1.iloc[:,1:].applymap(f2)

# 2. student.csv 파일을 읽고
pd.set_option('display.max_columns', None)
std = pd.read_csv('student.csv', encoding = 'cp949')

1) 주민번호 뒷자리 마스킹
std.dtypes

f3 = lambda x : str(x).replace(str(x)[6:], 'XXXXXXX')
std['JUMIN'].map(f3)

2) id의 왼쪽에 '*'을 삽입하여 모두 10자리로 생성
'75tur'.rjust(10,'*')
f4 = lambda x : x.rjust(10, '*')
std['ID'].map(f4)