728x90
반응형
SMALL
import numpy as np
추가
- append()
- insert()
추가 예제
arr = np.array([11,22,33,44,55])
arr
[OUT] :
array([11, 22, 33, 44, 55])
arr = np.append(arr,[100,200])
arr
[OUT] :
array([224, 335, 100, 200])
np.insert(arr,1,[1,2])
[OUT] :
array([ 11, 1, 2, 22, 33, 44, 55, 100, 200])
arr
[OUT] :
array([ 11, 22, 33, 44, 55, 100, 200]) # np.insert()했지만 arr이 수정된 것은 아님을 알 수 있음
arr = np.insert(arr,1,[1,2]) # np.insert()한 것을 다시 arr에 담아주어야 arr이 바뀜
arr
[OUT] :
array([ 11, 1, 2, 22, 33, 44, 55, 100, 200])
수정
- 인덱싱(indexing)
- 슬라이싱(slicing)
수정 예제
arr = np.array([11,22,33,44,55])
arr
[OUT] :
array([11, 22, 33, 44, 55])
arr[0] = 10
[OUT] :
array([ 10, 22, 33, 44, 55, 100, 200])
arr[1:3] = [222,333]
arr
[OUT] :
array([ 10, 222, 333, 44, 55, 100, 200])
arr[3:5] = arr[3:5] + 2
arr
[OUT] :
array([ 10, 222, 333, 46, 57, 100, 200])
수정 연습문제
#1. arr에서 200보다 큰 데이터에 대해 기존 값에 2를 더한 값으로 수정하시오.
arr = np.array([110,222,337,420,155,974,200,53,190])
arr
[OUT] :
array([110, 222, 337, 420, 155, 974, 200, 53, 190])
#1 solution
arr[arr>200] = arr[arr>200] + 2
arr
[OUT] :
array([110, 224, 339, 422, 155, 976, 200, 53, 190])
#2. arr에서 10보다 작은 데이터에 대해 기존값에 10을 곱한 값으로 수정하시오.
arr = np.array([11,3,24,7,5,18,2])
arr
[OUT] :
array([11, 3, 24, 7, 5, 18, 2])
#2 solution
arr[arr<10] = arr[arr<10] * 10
arr
[OUT] :
array([11, 30, 24, 70, 50, 18, 20])
삭제
- np.delete()
- np.where()
삭제 예제
arr = np.array([11,22,33,44,55])
arr
[OUT] :
array([11, 22, 33, 44, 55])
arr = np.delete(arr,[0,2])
arr
[OUT] :
array([22, 44, 55])
# where를 통해 인덱스 추출
np.where(arr<100)
[OUT] :
(array([0, 1]),)
삭제 연습문제
#1. arr에서 100이상인 값을 삭제하시오.
arr = np.array([11,222,37,420,155,94,20,53,190])
arr
[OUT] :
array([ 11, 222, 37, 420, 155, 94, 20, 53, 190])
#1 solution
arr = np.delete(arr,np.where(arr>=100))
arr
[OUT] :
array([11, 37, 94, 20, 53])
번외) 조건별 데이터 연산
- np.where()
- np.select()
where(), select() 예제
arr = np.array([11,130,370,114,55,94,200,30,190])
arr
[OUT] :
array([ 11, 130, 370, 114, 55, 94, 200, 30, 190])
np.where(arr>=100,'A','B') # arr에서 100이상이면 'A', 나머지는 'B'를 출력
[OUT] :
array(['B', 'A', 'A', 'A', 'B', 'B', 'A', 'B', 'A'], dtype='<U1')
conList = [arr>200, arr>100, arr>0]
choiceList=['A','B','C']
np.select(conList,choiceList)
# arr>200이면 'A', 그 외 arr>100이면 'B',그 외 arr>0이면 'C' 출력
[OUT] :
array(['C', 'B', 'A', 'B', 'C', 'C', 'B', 'C', 'B'], dtype='<U21')
arr
[OUT] :
array([ 11, 130, 370, 114, 55, 94, 200, 30, 190])
# 위의 where(), select()한 결과가 저장되지 않고 arr 그대로 출력되었음 (arr에 담지 않았으므로)
정렬
- sort()
- argsort()
정렬 예제
arr = np.array([44,11,55,22,33])
arr
[OUT] :
array([11, 22, 33, 44, 55])
np.sort(arr)
[OUT] :
array([11, 22, 33, 44, 55])
# 역정렬
np.sort(arr)[-1::-1]
[OUT] :
array([55, 44, 33, 22, 11])
# arg는 index반환 함수. argsort는 sort한 후 값이 아닌 인덱스 반환
np.argsort(arr)
[OUT] :
array([1, 3, 4, 0, 2])
번외)
- char.find(list, str) : list에서 str이 있는 인덱스를 리스트로 반환 (없으면 -1 반환)
- 리스트 컴프리핸션(list comprehension) : 리스트 안에 식, for 반복문, if 조건문 등을 지정하여 리스트 생성
char.find(), 리스트 컴프리핸션 연습문제
#1. name에서 '철' 글자가 있는 데이터를 보이시오. (np.char.find()사용)
name = np.array(['홍길동','김철수','임꺽정','김이철','철이임'])
#1 solution
np.char.find(name,'철')
[OUT] :
array([-1, 1, -1, 2, 0]) # '철'이 없으면 -1 반환 & '철'이 있으면 인덱스 반환
name[np.char.find(name,'철')!=-1] # np.char.find(name,'철')!=-1 이므로 '철'을 포함하는 값의 인덱스 반환
[OUT] :
array(['김철수', '김이철', '철이임'], dtype='<U3')
#2. name에서 '철' 글자가 있는 데이터를 보이시오. (리스트 컴프리핸션 사용)
name = np.array(['홍길동','김철수','임꺽정','김이철','철이임'])
#2 solution
[n for n in name if '철' in n] # n이 이름에 있는 동안 반복하고, '철'이 n에 있으면 n을 리스트에 넣기
[OUT] :
['김철수', '김이철', '철이임']
Review
- list comprehension 활용 많이 해보기
728x90
반응형
LIST