본문 바로가기

배우기/복습노트[Python과 분석]

[실습문제] 2024. 1. 12.(금) (2문제)

728x90
반응형

1. 연령별실업율_40-49세.csv 파일을 읽고

뒤에 잘린 옵션은 encoding = 'cp949' 이다.

 

1) 월 컬럼의 값을 1월, 2월, 3월, ...., 12월로 변경

 

현재 월 컬럼이 이렇게 정의되어 있다. 

두 가지 방법으로 풀이해보자.

 

sol1) for

 

 

sol2) map + lambda

 

 

2) 월컬럼을 인덱스로 설정 후, 모든 값에 대해 소수점 둘 째 자리로 표현하여 df2에 저장

 

set_index로 index 설정하는 방법은 외부 객체의 index는 불가하다.

 

아래와 같이 index 하는 방법도 있다.

 

index 메서드를 활용하면 외부 객체도 index 설정이 가능하지만 이 방법은 위와 같이 정보의 중복이 발생한다. 따라서 중복된 컬럼을 삭제하여야 하므로 내부 자료를 이용한다면 첫 번째 방법으로 수행하도록 하자.

 

 

 

3) 컬럼에서 년을 제외

df1.columns 하면 컬럼 이름을 확인할 수 있다.

 

여기서 df1.columns.replace('년', '')은 적용되지 않는다. 값치환 메서드가 호출되기 때문이다. 따라서 이 방법은 불가하다.

 

아래와 같이 수행하여야 한다.

 

현재 아래와 같이 df1에 월 컬럼 이름으로 '월'이 지정되어 있다.

 

연도에도 똑같이 '연도' 라고 컬럼 이름을 넣으려면 

df1.columns.name = '연도' 

라고 하면 된다. 그럼 아래와 같이 출력이 된다.

 

 

 

4) df1에서 연도별 실업율 평균

 

sol1) 수학/통계 메서드 활용

 

axis = 0 이 디폴트이므로 그냥 mean을 사용하여도 무방하다.

 

이런 방식으로 사용할 수 있는 수학/통계 메서드는 아래와 같다.

 

df1.sum(axis = 0)

df1.mean(axis = 0)

df1.var(axis = 0)

df1.std(axis = 0)

df1.min(axis = 0)

df1.max(axis = 0)

 

 

sol2) apply 

 

 

 

2. emp2.csv 파일을 읽고

 

1) DEPTNO 컬럼의 값을 모두 4자리로 변경(1 → 0001)

 

전부 다 출력되지 않았지만 같은 답으로 출력된다.

 

 

2) 보너스를 아래 기준으로 계산하여 BONUS 컬럼에 저장('-'의 경우 0으로 수정)

정규직이면 PAY의 10%, 정규직이 아니면 9%

이렇게 확인했을 때 PAY는 object가 나온다. 이는 DataFrame에서 문자라는 의미이다.

 

 

이렇게 int로 바꿔보려고 하니 오류 메시지의 맨 아래에 이런 메시지가 뜬다.

 

ValueError : invalid literal for int() with base 10 : '-'

 

이는 PAY라는 값 안에 '-' 가 있어서 integer로 변환할 수 없다는 의미이다.

그렇다면 '-' 값을 0으로 바꿔주고 위 문제를 풀면 되겠다.

 

참고로 데이터프레임의 타입을 바꾸는 메서드는 astype가 있다. 위 map + lambda를 아래와 같이 쓸 수도 있다.

 

 

 

STEP 1) '-' 을 0으로 수정

 

STEP 2) PAY 컬럼을 숫자로 변환

 

 

STEP 3) 조건에 맞게 연산

 

sol 1) for

 

 

sol 2) map 함수

 

 

3) np.where

 

위 값에 Series를 씌우지 않으면 큰 값을 축약해서 보여주는 값으로 출력이 된다.

np에서 제공하므로 numpy 객체를 제공하기 때문이다. 이는 자리수가 조금 커지면 출력을 다른 포맷으로 하는 것이 단점이다(e+07 이런 포맷으로).

round 처리도 안되고 int 변환도 되지 않아서 가장 바깥에 Series를 씌워서 출력 포맷을 바꾸었다.

본래 데이터 형식인 DataFrame이나 Series을 굳이 np로 바꿔서 계산하는 방법은 추천하지 않으므로 이 방법은 잘 사용하지 않을 것 같다.

 

 

3) POSITION이 없는 사람은 수습으로 변경

이 방법도 두 가지로 쓸 수 있는데, 한 가지는 추천하는 방법이 아니다.

일단 첫 번째 방법이다.

 

 

두 번째 방법이다.

 

첫 번째 방법은 데이터의 모든 값에 다 접근을 하지만 두 번째 방법은 해당 조건일 경우만 탐색하므로 속도가 아래 방법이 더 빨라서 두 번째 방법으로 해결할 것을 추천한다.

728x90
반응형