본문 바로가기

데이터 전처리/python

파이썬 인덱싱 기법,리스트,배열,딕셔너리,데이터프레임 핸들링

각 인덱싱 기법과

리스트의 추가(A.append(추가할 것),제거A.pop(위치))

배열의 추가(np.append(배열,추가할 것),np.insert(배열,추가위치[이후에 들어가는 자리임],추가 할 것),제거(np.delete(위치))

딕셔너리 key형태로 추가(A['key'] = [~]),제거(del A['key'])를 앞에서 포스팅 했습니다.

한 번 더 복습하고 범주화,결측치 핸들링을 해보겠습니다.

복습 내용은 캡처로 내용을 남겨두겠습니다.

import numpy as np

전화번호(지역번호),휴대폰번호 모두 앞에 '0'이 존재 한다. 이를 제대로 출력하기 위해 문자형으로 변환해주자.

위의 print문을 각 리스트갯수만큼  출력해줄려면?

for i in range(len(name)):
    print(('담당직원은 {}이고 평가는 {}입니다. 연봉상승률은 {:.2f}입니다. 문의전화는 {}로 주세요.').format(name[i],point[i],sal[i],call[i]))

>담당직원은 심영이고 평가는 B입니다. 연봉상승률은 0.12입니다. 문의전화는 033-572-4568로 주세요.
>담당직원은 병옥이고 평가는 B+입니다. 연봉상승률은 0.06입니다. 문의전화는 033-572-4563로 주세요.
>담당직원은 두한이고 평가는 C+입니다. 연봉상승률은 0.02입니다. 문의전화는 033-572-4551로 주세요.
>담당직원은 정재이고 평가는 A+입니다. 연봉상승률은 0.07입니다. 문의전화는 033-572-4560로 주세요.

char_replace
리스트에서의 추가,제거

아래는 리스트에서 어떤 문자를 제거해야하는데, 리스트가 너무 길어서 직접 카운팅이 불가능할 때 사용하시면 됩니다.

#sol2) 특정문자를 딱 골라 제거.
#하는 data.index():data의 리스트에서 순차적(->)으로 진행.
#물론 일반적인 요소값도 똑같이 진행.
A = ['깡패',38,'4$','고혈압']
A.pop(A.index('고혈압'))
A

>['깡패', 38, '4$']

배열에서의 추가,제거

아래는 배열에서 어떤 문자에 삽입하거나 삭제하는데 위치를 필요로 하는데, 그 위치를 찾는 방법입니다. 배열이 엄청 길어지면 찾기 힘들기에 이 방법도 필요합니다.

A = ['깡패', '38', '4$']
B = np.array(A)
#sol2)
#굳이 특정위치를 찾아서 넣을려면 이렇게 써봄.
np.where(B=='4$')
>(array([2], dtype=int64),)
np.where(B=='4$')[0]
>array([2], dtype=int64)
np.where(B=='4$')[0][0]
>2

np.insert(B,np.where( B =='4$')[0][0],['임금','협상'])

>array(['깡패', '38', '임금', '협상', '4$'], dtype='<U11')

array stack

vstack:수직으로 쌓는 모습

hstack:수평으로 쌓는 모습

 

딕셔너리

#dict 

A = {
    'subject' : ["미적분학","선형대수학","해석학","정수론","수리통계학","수학을 위한 프로그래밍"],
    '평점' : [3.8,4.5,4.1,3.2,4.7,5],
    '학점' : [3,3,3,2,2,2],
    '선수과목' : [np.NAN,'미적분학','선형대수학/미적분학','선형대수학/미적분학','선형대수학/미적분학','선형대수학/미적분학/수리통계학']
}

딕셔너리의 키에 대한 추가 ,제거

위의 내용은 데이터프레임에서 형태를 보는 코드입니다. 

아래는 하나의 컬을 만드는 모습입니다.

#col 선택
#1.
df['subject'] #R에서는 df$col

#2. col의 다중 선택 
df[['subject','평점']] #R에서는 select(data,colname)

 

간단한 데이터프레임은 쉽게 선택이 가능합니다.

#columns의 네임을 직접 찾으러가보자.
df.columns

df = df.drop(df.columns[0],axis=1) #1열이 방해되서 지웠습니다.

#co2,kosdaq,dollar_index를 추출해보자.
#df.columns[1,4,8]은 안된다. 차원으로 읽어버려서 행과열 추가적으로 하나의 다른 차원 총 3개로 읽어버림.
#그래서 df.columns[[]] 괄호 하나를 더 사용한다.
#앞서 df[]로 읽을 때 다중선택을하면 못읽는 것과 동일한 내용.
df.columns[[1,4,8]]

df[df.columns[[1,4,8]]]

결과는 다음과 같습니다.

하지만 변수명이 치기 어려우면 어떨까요? 대소문자가 막 섞여 있다면요.

치기 싫을겁니다. 이럴때는 아래와 같은 방법을 쓰면 좋을 것 같습니다.

 

 

아래는 행과열을 추출하는 방법입니다.

#행,열 모두 포함하여 조건추출.
#df.loc[] : 얘도 차원으로 읽어야하므로, [], 여러개를 뽑아낼려면? [[]]으로 사용.
df = pd.DataFrame(A)
df

df.loc[0:2,:]

df.loc[0:4,['subject','평점','강사진']]

아래는 행과 열을 제거하는 방법과 데이터 폼을 바꾸는 방법입니다.

#행 or 열을 삭제 하는 기법 df.drop
#다중 삭제할때는? []한번 해주어 위치값을 읽어주자.
df.drop(['subject','학점'],axis=1)

#df의 data 타입을 변경하는 방법 df.astype() : 'str','category','int','float'
df.dtypes

df['학점'] = df['학점'].astype('float')
df.dtypes

데이터프레임 행,열 제거drop

아래는 열 이름을 변경하는 방법입니다.

col names -> renaming