함수(함수_적용_열) OVER (
PARTITION BY 그룹열
ORDER BY 순서열
)
LEAD(<expression>[,offset[, default_value]]) OVER (
PARTITION BY (expr)
ORDER BY (expr)
)
SELECT
ENAME
, SAL
, PERCENT_RANK() OVER (
PARTITION BY DEPTNO
ORDER BY SAL DESC
) P_R
FROM
EMP
;
[실행 결과]
DEPTNO ENAME SAL P_R
------ ------ ---- ----
10 KING 5000 0
10 CLARK 2450 0.5
10 MILLER 1300 1
20 SCOTT 3000 0
20 FORD 3000 0
20 JONES 2975 0.5
20 ADAMS 1100 0.75
20 SMITH 800 1
30 BLAKE 2850 0
30 ALLEN 1600 0.2
30 TURNER 1500 0.4
30 MARTIN 1250 0.6
30 WARD 1250 0.6
30 JAMES 950 1
14개의 행이 선택되었다.
SELECT
ENAME
, SAL
, NTILE(4) OVER (
ORDER BY SAL DESC
) QUAR_TILE
FROM
EMP
;
[실행 결과]
DEPTNO ENAME SAL QUAR_TILE
------ ------- ---- --------
10 KING 5000 1
10 FORD 3000 1
10 SCOT 3000 1
20 JONES 2975 1
20 BLAKE 2850 2
20 CLARK 2450 2
20 ALLEN 1600 2
20 TURNER 1500 2
30 MILLER 1300 3
30 WARD 1250 3
30 MARTIN 1250 3
30 ADAMS 1100 4
30 JAMES 950 4
30 SMITH 800 4
14개의 행이 선택되었다.
str.isnumeric()
str
이 숫자인지 아닌지 판별.digit()
도 동일한 기능 .append
아님+
쓰면 됨join
은 리스트를 문자열로 합치는 거arr.index(i)
dic.item()
for key, value in num_dic.items():
s = s.replace(c,str(i))
이렇게 다시 넣어줘야 함for <원소> in <목록>:
형태로 작성<목록>
부분에는 리스트(list), 튜플(tuple), 문자열(string), 반복자(iterator), 제너레이터(generator) 등 순회가 가능한 왠만한 모든 데이터 타입을 사용할 수 있음<원소>
부분은 흔히 순회 변수(loop variable)라고 하는데, <목록>
부분에 넘긴 객체가 담고 있는 원소들이 루프가 도는 동안 하나씩 차례로 할당됨for letter in ['A', 'B', 'C']:
print(letter)
[실행 결과]
A
B
C
i = 0
for letter in ['A', 'B', 'C']:
print(i, letter)
i += 1
[실행 결과]
0 A
1 B
2 C
range()
와 len()
내장 함수를 이용하여 만든 인덱스 목록을 대상으로 루프를 돌리는 방법도 생각해 볼 수 있음letters = ['A', 'B', 'C']
for i in range(len(letters)):
letter = letters[i]
print(i, letter)
[실행 결과]
0 A
1 B
2 C
for entry in enumerate(['A', 'B', 'C']):
print(entry)
[실행 결과]
(0, 'A')
(1, 'B')
(2, 'C')
enumerate()
함수를 호출할 때 start
인자에 시작하고 싶은 숫자를 넘기기for i, letter in enumerate(['A', 'B', 'C'], start=1):
print(i, letter)
[실행 결과]
1 A
2 B
3 C
for
문은 내부적으로 in
뒤에 오는 목록을 대상으로 계속해서 next()
함수를 호출하고 있다고 생각할 수 있음iter()
함수에 넘겨 반복자(iterator)로 만든 후 next()
함수를 호출해보면 원소들이 차례로 얻어지는 것을 알 수 있음>>> iter_letters = iter(['A', 'B', 'C'])
>>> next(iter_letters)
'A'
>>> next(iter_letters)
'B'
>>> next(iter_letters)
'C'
enumerate()
함수를 호출한 결과를 대상으로 next()
함수를 계속해서 호출해보면, 인덱스와 원소의 쌍이 튜플(tuple)의 형태로 차례로 얻어지는 것을 알 수 있음>>> enumerate_letters = enumerate(['A', 'B', 'C'])
>>> next(enumerate_letters)
(0, 'A')
>>> next(enumerate_letters)
(1, 'B')
>>> next(enumerate_letters)
(2, 'C')
enumerate()
함수는 인자로 넘어온 목록을 기준으로 인덱스와 원소를 차례대로 접근하게 해주는 반복자(iterator) 객체를 반환해주는 함수라는 이야기enumerate()
함수의 반환 값을 리스트로 변환해보면 좀 더 명확하게 확인할 수 있음>>> list(enumerate(['A', 'B', 'C']))
[(0, 'A'), (1, 'B'), (2, 'C')]
>>> matrix = [['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I']]
>>> for r in range(len(matrix)):
... for c in range(len(matrix[r])):
... print(r, c, matrix[r][c])
...
0 0 A
0 1 B
0 2 C
1 0 D
1 1 E
1 2 F
2 0 G
2 1 H
2 2 I
>>> for r, row in enumerate(matrix):
... for c, letter in enumerate(row):
... print(r, c, letter)
...
0 0 A
0 1 B
0 2 C
1 0 D
1 1 E
1 2 F
2 0 G
2 1 H
2 2 I
df.to_csv("./result.csv", index=False)
DataConversionWarning: A column-vector y was passed when a 1d array was expected.
DataConversionWarning: A column-vector y was passed when a 1d array was expected.
Please change the shape of y to (n_samples,), for example using ravel().
데이터를 1차원 배열로 넣으라는 이야기
ravel()
, flatten()
cf. reshape()
: 1차원 배열을 다차원 배열로 만들어주는 numpy 함수
AttributeError: 'float' object has no attribute 'round'
example = 3.6
result = example.round() # error
result = round(example) # 4