본문 바로가기

python

14. pandas

728x90
반응형

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))

 


 

 

 

 


728x90
반응형

'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