데이터 전처리/python
파이썬 기초-2(배열 추가제거,배열의결합,딕셔너리,딕셔너리 추가제거)
JSMATH
2024. 4. 12. 02:53
배열 추가제거,중간에 삽입해버리는 방법이다.
import numpy as np
#array에서 추가하는 방법
a = np.array([1,2,3,4])
a
>array([1, 2, 3, 4])
a = np.append(a,[4,5])
a
>array([1, 2, 3, 4, 4, 5])
#아예 중간에 삽입(insert)이 가능하다. np.insert(data,order,[])
a = np.insert(a,1,[7,8])
a
>array([1, 7, 8, 2, 3, 4, 4, 5]) #1번째 이후로 바로 [7,8]이 삽입된 모습
#배열 제거
#np.delete(data,[order])
np.delete(a,[1,2])
a
>array([1, 2, 3, 4, 4, 5])
#array는 data.index가 불가능하다.
a.index(4)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[98], line 1
----> 1 a.index(4)
AttributeError: 'numpy.ndarray' object has no attribute 'index'
배열의 결합이다. R에서 cbind,rbind와 형태가 동일하다.
#array stack
array1 = np.array([[1, 2], [3, 4]])
array2 = np.array([[5, 6], [7, 8]])
#주의! np.hstack([]) 꼭 [],()형태로 사용해야한다. 그냥 적으면 오류
#np.v or h stack([array1,array2,..])
np.hstack([array1,array2])
>array([[1, 2, 5, 6],
[3, 4, 7, 8]])
np.vstack([array1,array2])
>array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
아래는 딕셔너리를 나타낸다. key값으로 요소나 리스트를 찾아낼 수 있다.
#dict A= { key : []} *key는 문자,수치형 다 가능. ":"임을 주의하자!
A = {
"과목" : ["미적분학","선형대수학","해석학","정수론","수리통계학","수학을 위한 프로그래밍"]
}
A
>{'과목': ['미적분학', '선형대수학', '해석학', '정수론', '수리통계학', '수학을 위한 프로그래밍']}
#"미적분학" 뒤에 과목의 명칭인 "학"을 떼어내라.
#앞에서 설명한 index를 사용한다.
A["과목"]
>['미적분학', '선형대수학', '해석학', '정수론', '수리통계학', '수학을 위한 프로그래밍']
A["과목"][0]
>'미적분학'
A["과목"][0].index("학")
>3 #'학'까지의 맨 처음부터 카운팅 0[미],1[적],2[분],3[학]
A["과목"][0][:A["과목"][0].index("학")]
len(A["과목"]) #과목에도 list형식으로 들어가므로 len으로 갯수 알수있음
>6
아래는 for문과 프린트문 인덱싱을 종합한 문제이다.
#for 문을 사용해서 A의 과목들을 아래의 프린트문으로 모두 나타내라.
#"내가 듣고 싶은 과목은 A["과목"]이다."
for i in range(len(A["과목"])):
print(("내가 듣고 싶은 과목은 {}이다.").format(A["과목"][i]))
>내가 듣고 싶은 과목은 미적분학이다.
내가 듣고 싶은 과목은 선형대수학이다.
내가 듣고 싶은 과목은 해석학이다.
내가 듣고 싶은 과목은 정수론이다.
내가 듣고 싶은 과목은 수리통계학이다.
내가 듣고 싶은 과목은 수학을 위한 프로그래밍이다.
아래는 딕셔너리 추가,제거하는 방법이다.
#dict 추가 A["new_col"] = [] R과 동일하다. A$col = c() or A["new_col"]=c()
A["학점"] = [3,3,3,2,2,1]
A["난이도"] = [3,2,4,2,4,3,1]
A
>{'과목': ['미적분학', '선형대수학', '해석학', '정수론', '수리통계학', '수학을 위한 프로그래밍'],
'학점': [3, 3, 3, 2, 2, 1],
'난이도': [3, 2, 4, 2, 4, 3, 1]}
#dict 삭제 del data["col"]
del A["난이도"]
A
>{'과목': ['미적분학', '선형대수학', '해석학', '정수론', '수리통계학', '수학을 위한 프로그래밍'],
'학점': [3, 3, 3, 2, 2, 1]}
아래는 범주화하는 문제이다.(*아직 안다룬 방식도 있습니다.)
import pandas as pd
df = pd.DataFrame(A)
df
과목 학점
0 미적분학 3
1 선형대수학 3
2 해석학 3
3 정수론 2
4 수리통계학 2
5 수학을 위한 프로그래밍 1
#Q)
#Pastry는 3학점짜리를 들으면 한학기 학점이 오버되어 수강신청실패,
#2학점짜리를 들으면 학점계산에 맞아서 성공.
#1학점짜리를 들으면 나중에 찝찝해서(?) 실패.
#성공과실패의 카테고리화 시켜라.
#들여쓰기 조심해야 할것.
def categorize(df):
if 0<df<=1:
return "수상신청 실패"
elif 1<df<=2:
return "수강신청 성공"
else:
return "수강신청 실패"
#여기서 col을 지정한다. df["학점"] 한정!
df["실패여부"] = df["학점"].apply(categorize)
df
과목 학점 실패여부
0 미적분학 3 수강신청 실패
1 선형대수학 3 수강신청 실패
2 해석학 3 수강신청 실패
3 정수론 2 수강신청 성공
4 수리통계학 2 수강신청 성공
5 수학을 위한 프로그래밍 1 수상신청 실패