[1, 4, 9, 16]
On this page
파이썬 자료형
a.f()
형태를 읽는 팁
a.f()
는f(a)
로 생각하면 편리함a.f(2)
는f(a,2)
로 생각하면 편리함
리스트 컴프리헨션
튜플
인덱싱고급 (스트라이딩)
스트라이딩 [start:stop:step]
# 주어진 리스트에서 x_i>80 의 조건을 만족하는 원소의 갯수는?
x = [80,60,80,90,55,85,95,100,35,70,75,65,95]
sum([i>80 for i in x])
5
리스트 컴프리헨션을 이용하여 \[ z = [x_1^2 + y_1^2, ... , x_8^2+y_8^2] = [x_i^2 + y_i^2 : \text{for}\ i = 1,2,3,...,8] \] 와 같은 리스트를 생성하라.
[10, 8, 17, 26, 40, 29, 52, 98]
아래와 같은 문자열이 있다고 하자.
test_arr = 'ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSUGPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XAt3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/EnmZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbxNrRFi9wrf+M7Q== schacon@mylaptop.local'
이 문자열에서 대문자의 수를 count하라.
Numpy
array([0. , 0.09090909, 0.18181818, 0.27272727, 0.36363636,
0.45454545, 0.54545455, 0.63636364, 0.72727273, 0.81818182,
0.90909091, 1. ])
array([-1.13998443, 0.76993493, -0.27241088, -1.15305554, -1.07096225,
1.45305076, -0.69331096, 1.23455362, 0.29442183, -0.04995428])
array([0.52396217, 0.88733873, 0.60787126, 0.97045172, 0.93069322,
0.06647319, 0.53918035, 0.71268956, 0.19958319, 0.05187009])
array([[-1.58796509, -1.44762151],
[-1.13955349, -0.93728862]])
행렬 관련 기능
Numpy: axis의 이해
두번째 차원을 바꾸고 싶다 -> 두번째 축을 바꾸고 싶다 -> axis = 1 (파이썬은 0부터 시작)
값이 바뀌는 부분이 axis
ex)
a.shape, b.shape, np.concatenate([a,b],axis=1).shape
((2, 3, 4), (2, 3, 4), (2, 6, 4))
ex)
Pandas
행과 열의 선택
import pandas as pd
np.random.seed(43052)
att = np.random.choice(np.arange(10,21)*5,20)
rep = np.random.choice(np.arange(5,21)*5,20)
mid = np.random.choice(np.arange(0,21)*5,20)
fin = np.random.choice(np.arange(0,21)*5,20)
student_id = ['2022-12'+str(s) for s in np.random.choice(np.arange(300,501),20,replace=False)]
df2 = pd.DataFrame({'id':student_id,'att':att,'rep':rep,'mid':mid,'fin':fin})
df2.head()
id | att | rep | mid | fin | |
---|---|---|---|---|---|
0 | 2022-12380 | 65 | 55 | 50 | 40 |
1 | 2022-12370 | 95 | 100 | 50 | 80 |
2 | 2022-12363 | 65 | 90 | 60 | 30 |
3 | 2022-12488 | 55 | 80 | 75 | 80 |
4 | 2022-12312 | 80 | 30 | 30 | 100 |
가장 안전한 코드
df.loc[:,:]
상황: 하나의 col을 뽑으려 할 때 좋은 코드
df.att
or df['att']
상황: row 슬라이싱 할 때 좋은 코드(★★★)
df[:5]
위의 상황 이외에는 df.loc[:,:]
를 사용하는 것이 유리하다.
상황: column 슬라이싱 할때
df.loc[:, 'att':'mid']
상황: row + column 슬라이싱하는 가장 좋은 코드
df.loc[0:5, 'att':'mid']
상황: 조건에 맞는 col을 뽑기에 가장 좋은 코드
df.loc[:, [len(col_name)>2 for col_name in df.columns]]
상황: 조건에 맞는 row, col을 뽑기에 가장 좋은 코드
df.loc[df.att<60, [len(col_name)>2 for col_name in df.columns]]
- 여러 열을 뽑을때에는 리스트로 묶어주어야함. ex)
df.loc[:, ['B','C']]
lambda
람다표현식(lambda expression) 자체가 하나의 오브젝트임.
람다 표현식에 이름을 줄 수 있음
위의 코드는 아래와 같다.
조건부 출력
map
list(map(함수, input))