본문 바로가기

코딩으로 익히는 Python/Numpy

[Python] 04. numpy 추가,수정,삭제,정렬 : append(),insert(),where(),select(),delete(),sort()예제

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