python / 자료 형변환하기(int, float,filter), 최댓값/최솟값(max,min)
069 실수형 자료를 정수형 자료로 변환하기(int)
ㅁ 오라클의 변환함수
1. to_char
2. to_number
3. to_date
ㅇ파이썬의 변환함수
데이터유형 | 변환함수 | |
정수형 | int | int() |
문자형 | str | str() |
실수형 | float | float() |
리스트형 | list | list() |
튜플형 | tuple | tuple() |
코드 작성시 수학연산을 하다보면 정수끼리 계산을 해야하는 경우가 있음. 이때 우리가 가진 데이터가 실수형이라면 실수형 자료를 정수형으로 변환한 후에 계산해줘야함.
파이썬 내장함수 int()는 인자로 입력된 실수형 자료를 정수형 자료로 변환해줌.
int()는 입력된 실수형 자료의 소수부분은 버리고 정수부분만 취하여 정수값으로 리턴.
print( int(-5.4) ) # -5
문제248. 이름과 보너스를 출력하는 아래의 코드를 실행할때 보너스가 실수형이 아니라 정수형으로 출력되게 하시오.
def ten_bonus(num):
return int(num*0.1)
emp['bonus'] = emp['sal'].apply(ten_bonus)
emp['bonus'] = emp['bonus'].apply(int)
emp[['ename','bonus']]
.apply(int) => 데이터프레임 컬럼을 정수형으로 불러오겠다는 의미
070 정수형 자료를 실수형 자료로 변환하기(float)
이미지 처리나 공학용 프로그램을 작성할 때 실수형 끼리만 계산해야하는 경우가 많음. 이때 우리가 가진 데이터가 정수형이라고 하면 정수형 자료를 실수형 자료로 변환한 후에 계산해줘야함.
파이썬 내장함수 float()은 인자로 입력된 정수형 자료를 실수형으로 변환해줌.
print( float(10) ) # 10.0이 출력됨
문제249. 이름과 월급을 출력하는데 월급을 출력할 때 실수형으로 출력하시오.
emp['sal'] = emp['sal'].apply(float)
emp[['ename','sal']]
apply함수는 함수를 적용할 때 사용하는 것이고 astype은 자료형을 변경할 때 사용하는 것.
따라서 자료형 변환할때 .apply(float)를 하나 .astype(float)을 하나 똑같음.
apply함수에는 어떤 함수도 적용할 수 있지만 astype은 자료형 함수들만 적용할 수 있음. 자료형 함수에는 int, float, list, str, tuple이 있음.
문제250. 이름과 월급을 출력하는데 월급을 출력할 때 실수형으로 출력하시오. 판다스 이용하지 않고 loop문으로 구현하시오.
import csv
file = open('c:\\data\\emp5.csv')
emp_csv = csv.reader(file)
for i in emp_csv:
print(i[1],float(i[5]))
=> 위와같이 loop문으로 작성하지 말고 판다스의 apply를 이용해서 작성하는게 코드도 간결하고 성능도 빠름.
071 정수 리스트에서 소수만 걸러내기(filter)
filter 함수의 첫번째 인자는 특정 조건의 값을 추출하는 함수가 입력되며 두번재 인자(입력매개변수)는 리스트와 같은 자료형이 입력됨.
예제.숫자가 나열되어 있는 아래의 리스트에서 짝수만 추출하시오
a = [1,2,3,4,5,6,7,8,9,10]
def get_even(num):
if num%2 == 0:
return num
else:
return
print(get_even(2)) # 2
print(get_even(7)) # None
# filter() 함수를 사용한 방법
a = [1,2,3,4,5,6,7,8,9,10]
result = filter(get_even,a)
print(list(result))
# filter함수로 출력된 결과를 보고싶을때 list로 둘러줘야함
# 문법
# filter(함수명, 리스트)
문제251. 아래의 리스트에서 숫자가 300이상이면 출력하고 300미만이면 출력되지 않게 하시오
b = [100,352,254,456,123,567,903]
def trois_c(num):
if num >= 300:
return num
else:
return
result = filter(trois_c,b)
print(list(result))
문제252. (알고리즘 문제) 아래의 리스트에서 소수만 출력하시오.
a = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
소수란 ? 1보다 큰 자연수 중 1과 자기 자신만을 약수로 가지는 수다
1보다 큰 자연수 중에 1과 자기 자신으로만 나눌 수 있는 수
2 = 1 , 2
3 = 1 , 3
4 = 1, 2, 4 로 나눌 수 있어서 소수가 아니다
5 = 1, 5
6 = 1, 2, 3, 6
7 = 1, 7
8 = 1, 2, 4, 8
9 = 1, 3, 9
c = [1,2,3,4,5,6,7,8,9,10]
def func1(num):
cnt = 0
for i in range(1,num+1):
result = num % i
if result == 0:
cnt += 1
if cnt == 2:
return num
result2 = filter(func1,c)
print(list(result2))
072 최대값, 최소값 구하기(max, min)
max()와 min()은 인자로 입력된 자료에서 최대, 최소값을 구해주는 함수. max()와 min()의 인자로 리스트와 같은 시퀀스 자료가 입력되면 시퀀스 자료의 요소 가운데 최대값 또는 최소값을 구하여 리턴함.
오라클 | 파이썬 |
max | max |
min | min |
count | count |
sum | sum |
avg | mean |
예제. 리스트에서 최대값을 출력하는 방법
1. 파이썬 내장함수를 이용했을 때
print(max(a))
2. 넘파이 모듈을 이용했을 때
import numpy as pn
a2 = np.array(a) # a리스트를 numpy의 배열 자료구조로 만듦
a2.max()
3. 판다스의 series를 이용했을 때
import pandas as pd
a3 = pd.Series(a) # a리스트를 판다스의 시리즈 자료구조로 만듦.
a3.max()
문제253. 이름과 부서위치를 판다스로 출력하시오.
import pandas as pd
emp = pd.read_csv("c:\\data\\emp2.csv")
dept = pd.read_csv("c:\\data\\dept3.csv")
result = pd.merge(emp,dept, on = 'deptno')
result[['ename','loc']]
문제254. DALLAS에서 근무하는 사원들의 월급중에 최대월급을 출력하시오.
DA_sal = result['sal'][result['loc'] =='DALLAS'].max()
DA_sal
문제255. 부서위치, 부서위치별 최대월급을 출력하시오.
-- SQL
select d.loc, max(e.sal)
from emp e, dept d
where e.deptno = d.deptno
group by d.loc;
# 판다스
result = pd.merge(emp,dept, on = 'deptno')
loc_sal = result.groupby('loc')['sal'].max().reset_index()
loc_sal.columns=['부서위치','최대월급']
loc_sal
문제256. 백화점 데이터를 가지고 데이터 프레임을 만드시오(데이터 프레임명 : x_train)
import pandas as pd
x_train = pd.read_csv("c:\\data\\X_train.csv",encoding ="euckr")
x_train
문제257. 주구매지점을 중복제거해서 출력하시오
x_train['주구매지점'].unique()
# .unique() : 중복제거
문제258. 백화점 데이터에서 주구매지점, 주구매지점별 최대 구매액을 출력하시오.
x_train.groupby('주구매지점')['총구매액'].max().reset_index()
문제259. 위의 결과를 다시 출력하는데 총구매액의 최대값이 높은 것부터 출력하시오.
result = x_train.groupby('주구매지점')['총구매액'].max().reset_index()
result.sort_values('총구매액', ascending = False)
문제260. (점심시간 문제) 주구매지점별 주말 방문비율의 토탈값을 출력하는데 주말 방문 비율의 토탈값이 높은 것부터 출력되게 하시오.
result = x_train.groupby('주구매지점')['주말방문비율'].sum().reset_index()
result.columns = ['주구매지점','주말방문비율_토탈']
result.sort_values('주말방문비율_토탈', ascending = False)