■ 65. pandas 를 이용해서 조건절 사용 데이터 검색 방법
오라클 VS 판다스
1. between...and 1000 <= emp['sal'] <= 3000 또는
emp['sal'].between[1000,3000]
2. in isin
3. is null isnull()
4. like apply 함수, lambda 표현식
문제215.
우리반(emp7.csv) 에서 이름이 이소진 학생의 이름과 나이를 출력하시오
import pandas as pd
emp=pd.read_csv("d:\\emp8.csv")
print(emp[['ename','age']][emp['ename']=='이소진'])
문제216.
나이가 25에서 28 사이인 학생들의 이름과 나이를 출력하시오
emp6.csv <---6기
emp7.csv <---7기
emp8.csv <---8기
import pandas as pd
emp=pd.read_csv("d:\\emp8.csv")
print(emp[['ename','age']][emp['age'].between(25,28)])
25<=emp['age']<=28 은 안되서
.between(28,28) 로 해야함 (이유는 모름)
문제217.
나이가 25에서 28사이가 아닌 학생들의 이름,나이를 출력하시오
오라클: not 을 표현할 때 ! 를 사용한다.
R, 판다스: not 을 표현할 때 ~ 을 사용한다.
***물결은 숫자만 가능.int.
import pandas as pd
emp=pd.read_csv("d:\\emp8.csv")
print(emp[['ename','age']][~emp['age'].between(25,28)])
*조건절 테이블명 앞에 물결표시해줘서 not 표현
문제218.
7기 학생들중에서 전공이 환경공학, 신학인 학생들의
이름, 전공을 출력하시오
import pandas as pd
emp=pd.read_csv("d:\\emp7.csv")
print(emp[['ename','major']][emp['major'].isin(['신학','환경공학'])])
■ 66. pandas 를 이용한 조인
문제219.
판다스를 이용해서 이름,부서위치를 출력하시오
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
dept=pd.read_csv("d:\\csv\\dept.csv")
result=pd.merge(emp,dept,on='deptno')
print(result[['ename','loc']])
13개 나온거 보니까 boston 안나옴. 근데 sal 로 뽑으면
13개 다 나옴. 크로스조인인가
pandas의 merge를 이용해서 deptno로 조인하겠다
문제220.
부서위치가 DALLAS 인 사원들의 이름,부서위치를 출력하시오
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
dept=pd.read_csv("d:\\csv\\dept.csv")
result=pd.merge(emp,dept,on='deptno')
print(result[['ename','loc']] [result['loc']=='DALLAS'])
문제221.
이름,부서위치를 출력하는데 아래의 sql의 outer join을
pandas로 구현하시오
SQL> select e.ename, d.loc
from emp e, dept d
where e.deptno = d.deptno (+);
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
dept=pd.read_csv("d:\\csv\\dept.csv")
result=pd.merge(emp,dept,on='deptno', how='right')
print(result[['ename','loc']])
문제222.
아래의 full outer join을 pandas로 구현하시오
SQL> selece e.ename, d.loc
from emp e full outer jon dept d
on (e.deptno=d.deptno) ;
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
dept=pd.read_csv("d:\\csv\\dept.csv")
result=pd.merge(emp,dept,on='deptno', how='outer')
print(result[['ename','loc']])
■ 67. pandas 를 이용한 서브쿼리
문제223.
JONES 보다 더 많은 월급을 받는 사원들의 이름,월급을 출력하시오
**답못받아씀 다시푸시오
SQL> select ename, sal
from emp
where sal> (select sal from emp
where ename='JONES');
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
jonessal=emp[['ename','sal']][emp['ename']=='JONES'].values[0]
print(jonessal)
--------------------------------------------------------------------------------
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
jonessal=emp[['ename','sal']][emp['ename']=='JONES'].values[0][0]
print(jonessal)
.values[0] 가 맨앞의 값 보이지 않게 출력하라는 뜻.
---------------------------------------------------------
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
jonessal=emp[['sal']][emp['ename']=='JONES'].values[0][0]
print(jonessal)
-------------------------------------------------
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
jonessal=emp[['sal']][emp['ename']=='JONES'].values[0]
print(jonessal)
출력값 하나에 values[0] 하면 리스트 씌워짐.
문제224.
SCOTT 의 직속상사의 이름을 출력하시오
SQL> select ename
from emp
where empno=(select mgr
from emp
where ename='SCOTT')
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
scottmgr=emp[['mgr']][emp['ename']=='SCOTT'].values[0][0]
print(scottmgr)
result=emp[['ename']][emp['empno']==scottmgr]
print(result)
문제225.
관리자인 사원들의 이름을 출력하시오
SQL> select ename
from emp
where empno in (select mgr
from emp) ;
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
mgr=emp[['ename']][emp['empno'].isin(emp['mgr'])]
print(mgr)
문제226.
관리자가 아닌 사원들의 이름을 출력하시오
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
mgr=emp[['ename']][~emp['empno'].isin(emp['mgr'])]
print(mgr
문제227.
최대월급을 받는 사원의 이름과 월급을 출력하시오
SQL> select ename, sal
from emp
where sal = (select max(sal)
from emp);
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
maxsal=max(emp['sal'])
print(maxsal)
또는
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
maxsal=max(emp['sal'])
maxsal2=emp['sal'].max()
print(maxsal2)
이제 이름도 같이 뽑으려면
import pandas as pd
emp=pd.read_csv("d:\\csv\\emp.csv")
maxsal=max(emp['sal'])
maxsal2=emp['sal'].max()
result=emp[['ename','sal']] [emp['sal']==maxsal].vaules[0]
print(result)
■ 73. 판다스와 오라클 그룹함수 비교
문제236. 직업, 직업별 최대월급을 출력하시오
SQL>select job, max(sal)
from emp
group by job;
↓
답:
import pandas as pd
emp=pd.read_csv('d:\\csv\\emp.csv')
result=emp.groupby('job')['sal'].max()
print(result)
문제237.
부서번호,직업,부서번호별 직업별 토탈월급을 출력하시오
SQL>select deptno, job, max(sal)
from emp
group by deptno, job;
↓
import pandas as pd
emp=pd.read_csv('d:\\csv\\emp.csv')
result=emp.groupby(['deptno','job'])['sal'].sum()
print(result)
문제238.
직업, 직업별 토탈월급을 출력하는데
직업이 SALESMAN 은 제외하고 출력하고
직업별 토탈월급이 6000 이상인 것만 출력하시오
import pandas as pd
emp=pd.read_csv('d:\\csv\\emp.csv')
emp['job']=emp['job'][emp['job']!='SALESMAN'] #세일즈맨 제외직업
result=emp.groupby('job')['sal'].sum() #직업별 토탈월급
result1=result>=6000 #직업별 토탈월급이 6천 이상인 것
print(result[result1==True])
물결표시 (~) 안되는 이유는 숫자비교
또는
isin 과 같이 not 이 포함안된 비교 함수에 쓸 때 !
■ 74. 판다스와 오라클 데이터 분석 함수 비교
"순위를 출력하는 분석함수를 판다스에서 구현"
문제239.
이름,월급,순위를 출력하시오
import pandas as pd
emp=pd.read_csv('d:\\csv\\emp.csv')
emp['rnk']=emp['sal'].rank(ascending=False).apply(int)
emp=emp.sort_values('rnk', ascending=True)
print(emp[['ename','sal','rnk']])
import pandas as pd
emp=pd.read_csv('d:\\csv\\emp.csv')
emp['rnk']=emp['sal'].rank(ascending=False).apply(int) # <-숫자화
emp=emp.sort_values('rnk', ascending=True)
print(emp[['ename','sal','rnk']])
문제240.
직업, 직업별 토탈월급, 순위를 출력하는데
순위는 직업별 토탈월급이 높은 것에 대한 순위이다.
import pandas as pd
emp=pd.read_csv('d:\\csv\\emp.csv')
result=emp.groupby('job')['sal'].sum().reset_index() #Serise 로 저장하는게 아니라
#data frame(=True)로 저장하려고
#reset_index() 를 사용한다.
print(result)
*데이타 프레임은 테이블(오라클로 치면)
*시리즈는 한 개의 컬럼
시리즈를 모아놓은게 데이타 프레임
*직업별 토탈월급은 시리즈로 나열가능하나, 컬럼명을 갖지 못해서
rnk 작업을 위해 끌고와서 쓸수가 없다
근데
reset_index 때리면, 컬럼명으로 sal 이 생기면서
rnk 작업을 먹일 수 있다.
import pandas as pd
emp=pd.read_csv('d:\\csv\\emp.csv')
result=emp.groupby('job')['sal'].sum().reset_index()
#print(result)
result['rnk']=result['sal'].rank(ascending=False).apply(int)
print(result[['job','sal','rnk']].sort_values('rnk',ascending=True))
'python' 카테고리의 다른 글
15-1. round, filter, type변환하기 (0) | 2019.03.25 |
---|---|
★판다스공식 (0) | 2019.03.25 |
13. 이진탐색 (0) | 2019.03.25 |
12. %, divmod, max/min (0) | 2019.03.25 |
11. try~except (0) | 2019.03.25 |