파이썬 판다스, sql 출력 select, from, where, ifnull, between

박재정·2025년 2월 4일

학습정보

목록 보기
15/29

1. 판다스로 생성 할수 있는 두객체의 이름은?

* 시리즈 : 1차원 배열

시리즈는 데이터가 순차적으로 나열된 1차원 배열의 형태를 갖는다.
인덱스(index)는 데이터 값(value)과 일대일 대응이 된다.
키(k)와 값(v)이 '{k:v}' 형태로 짝을 이루는 파이썬 딕셔너리(dictionary)와 비슷한 구조를 갖는다고 볼 수 있다.
시리즈의 인덱스는 데이터 값의 위치를 나타내는 이름표(데이터 주소) 역할을 한다.
index2라는 주소를 알고 있다면 data2라는 원소 데이터 값에 바로 접근 가능하다.
딕셔너리와 시리즈의 구조를 비교해서 보면
딕셔너리의 키(k)는 시리즈의 인덱스에 대응하고, 딕셔너리 각 키에 매칭되는 값(v)이 시리즈의 데이터 값으로 변환된다.

* 데이터프레임 : 2차원 배열

판다스 데이터프레임DataFrame은 칼럼(열) n개짜리 테이블이라고 볼 수 있습니다.
데이터프레임을 생성하는 첫번째 방법은 딕셔너리를 pd.DataFrame으로 감싸는 형식으로 생성해주는 방법입니다.
이때 key값들은 칼럼명이 되고, 각 value들은 칼럼별 값들로 들어가게 됩니다.
다시말해 key-value 한 쌍이 데이터프레임에서 한 칼럼(열) 입니다.
여기서 value로 들어가는 리스트들의 길이가 모두 같아야 합니다. 길이 다른 리스트가 하나라도 있으면 에러가 떠요.

2. 아래의 결과값을 예측하시고, 에러가 나는 부분은 왜 에러가 나는지 설명하고 수정하시오.

s = pd.Series(data = [1000,2000,"3000"],index = ["메로나","구구콘",-1])
print(s)

print(s.iloc[0]) #1000
print(s.iloc[1]) #2000
print(s.iloc[2]) #3000
print(s.iloc[-1]) #3000

print(s.loc["메로나"]) #1000
print(s.loc["구구콘"]) #2000
print(s.loc["하겐다즈"]) #Key error 인덱스값 하겐다즈가 없음 index = ["메로나","구구콘","하겐다즈"] 수정시 정상 작동

메로나    1000
구구콘    2000
-1      3000  # 문자열로 입력되어 있음
dtype: object  # 데이터 타입이 object로 변환됨

3. 아래의 결과를 예측하고 그 결과를 설명하시오.

import numpy as np

arr1 = np.array([1, 2, 3])
arr2 = np.array([
[1],
[2],
[3]
])

print(arr2.shape) #(3,1) 형태 3행 1열 2D배열

result = arr1 + arr2
print(result)

result = arr1 + arr2
print(result)

[[1+1, 2+1, 3+1],
 [1+2, 2+2, 3+2],
 [1+3, 2+3, 3+3]]

==> [[2 3 4]
     [3 4 5]
     [4 5 6]]

4. 넘파이에서 브로드 캐스팅에 대한 개념과 브로드 캐스팅이 일어 나는 조건은?


브로드캐스팅은 어떤 조건만 만족한다면 모양이 다른 배열끼리의 연산도 가능하게 해주며 모양이 부족한 부분은 확장하여 연산을 수행할 수 있도록 한다는 것이라고 생각할 수 있다. 확장 또는 전파한다는 의미로 Broadcasting을 설명하는 가장 간단한 예는 배열과 스칼라 값을 계산하는 것이다. 스칼라는 일반 상수를 생각하면 된다.

차원의 크기가 1일때 가능하다두 배열 간의 연산에서 최소한 하나의 배열의 차원이 1이라면(0번 축이든 1번 축이든; 1행이든 1열이든) 가능하다.

차원의 짝이 맞을 때 가능하다차원에 대해 축의 길이가 동일하면 브로드캐스팅이 가능하다

아래는 3차원 배열의 브로드 캐스팅


SQL 쿼리

5. emp 테이블에서 ename(사원이름)의 두번째 문자가 'A'인 사원의 이름을 출력한다면?

SELECT ename
FROM emp
WHERE SUBSTR(ename, 2, 1) = 'A';

Like 연산자 활용시 

SELECT ename
FROM emp
WHER#E like(_A%);

6. mgr 가 null 이면 없음으로 출력하시오.

SELECT ename, IFNULL(MGR, '없음') AS MGR
FROM emp;

7. EMP 테이블에서 사원이름이 5자 이상인 사원들의 사번과 이름을 출력해보세요

SELECT EMPNO, ENAME
FROM EMP
WHERE LENGTH(ENAME) >= 5;

8.급여가 1000과 2000 사이인 사원들의 사원번호, 이름, 급여를 출력.

SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL >= 1000 AND SAL <= 2000;

or

SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL BETWEEN 1000 AND 2000;

9.커미션이 NULL인 사원의 사원이름과 커미션을 출력

SELECT ENAME, COMM
FROM EMP
WHERE COMM IS NULL;

or

SELECT ENAME, NVL(COMM, 'NO COMM') AS COMM
FROM EMP;

10.입사년도가 81년인 사원들의 입사일과 사원번호를 출력

SELECT EMPNO, HIREDATE
FROM EMP
WHERE TO_CHAR(HIREDATE, 'YY') = '81';

or

SELECT EMPNO, HIREDATE
FROM EMP
WHERE EXTRACT(YEAR FROM HIREDATE) = 1981;

세줄요약:
1. 넘파이에서 브로드캐스팅이 일어나는 케이스를 잘 이해 하자.
2. 판다스란 = 시리즈 + 데이터프레임 이다.
3. 오라클 = nvl함수이고 이고 mysql은 ifnull 이다.

profile
파이썬, SQL 개발

0개의 댓글