[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([ 0.10617284, 0.72375906, 0.21798968, 0.19402231, -0.68898998,
-0.35166964, 0.99093298, 1.21214682, -0.60896544, 0.03254898])
array([0.42891863, 0.34443157, 0.58565357, 0.95396214, 0.88773763,
0.02981978, 0.40022832, 0.32824551, 0.52936974, 0.52123622])
array([[-0.38160921, -0.94802082],
[ 0.45375798, -0.71627028]])
행렬 관련 기능
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
행과 열의 선택
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))