본문 바로가기
서비스 기획/☁️ 데이터 분석 공부

[코드잇] 1. 데이터 프레임 다루기

by 림뽀 2022. 7. 5.
반응형

코드잇 "데이터 사이언스 입문" 과정을 수강 중이다.

 

해당 코스 "2강 데이터 프레임 다루기"의 마지막 퀴즈 3개는 갑자기 높아진 난이도를 자랑한다. 😅

이틀에 걸쳐서 여러 가지 방법을 찾으면서 공부한 내용을 정리했다.

 

1. DataFrame 조건에 맞는 행의 값만 변경하기

1.1. 조건에 맞는 행의 특정 열의 값 변경하기

 

#너무 길면 헷갈리니까 조건은 미리 정의하기
condition = (df['course name'] == 'information technology') & (df['year']==1)

#조건에 맞는 값만 변경하기
df.loc[condition,'status']= 'not allowed' #df.loc[조건, '열 이름'] = '바꿀 값'

 

1.2. 조건에 맞는 행의 모든 값 변경하기

 

#조건은 미리 정의하기
condition = (df['course name'] == 'information technology') & (df['year']==1)

#조건에 맞는 행의 모든 값 바꾸기
df[condition]= 'not allowed' #df[조건] = '바꿀 값'

 

2. Dictionary에 맞게 DataFrame 한 열의 값 바꾸는 방법

출처: 코드잇

 

과제는 'room assignment'이 같은 'course name'을 오름차순으로 정렬 후, 순서대로 'room assignment-1', 'room assignment-2' ... 이런 식으로 방 배정을 해주는 것이었다.

 

그래서 좌측의 0~2 데이터를 보면 Auditorium이 Auditorium-3, Auditorium-3, Auditorium-1이 된 것을 볼 수 있다. 나는 이 문제를 풀기 위해 다음과 같이 세 가지 스탭으로 진행했다.

 

1. 'room assignment'별로 'course name' unique 값을 가져온 다음, 오름차순으로 정렬한다.

 

a=df.loc[df['room assignment'] == 'Auditorium','course name'].unique()
a=np.sort(a)

 

2. dictionary를 만들어서 'course name':'room assignment-n' 세트를 넣어준다. '원래 값' : '변경할 값'이다.

 

k=1
dict1={}
for i in a:
   dict1[i]=('Auditorium-'+str(k))
   k+=1

 

3. dictionary에 모든 세트를 넣어준 다음, 이제 course name 열의 기존 값을 새로운 값으로 치환해준다.

처음에 헷갈렸던 게, 각 course name에 해당하는 값을 새로운 열로 넣어줄 수 있다고 생각했는데, 그게 아니라 course name 열 내에서 값을 변경해줄 수 있는 것이었다.

.fillna를 붙여서 치환할 값이 없는 course name은 모두 'not assigned'로 변경해준다.

 

df['room number']=df['course name'].map(dict1).fillna('not assigned')

 

*참고*

아래 방법을 이용하면 Dictionary에 정의되어 있지 않은 (그러니까 변환할 정보가 없는) 값을 어떻게 할 것인지 정할 수 있다. 같은 값을 일괄적으로 넣어줄 수도 있고, 아니면 기존 값으로 유지할 수도 있다.

 

df['col2'].map(dic).fillna(df['col2']) # 'col2' 컬럼의 기존 값으로 NA 채움
df['col2'].map(dic).fillna(1) # 1로 NA 채움

 

참고한 링크:

 

[Python] 한 Column에 대해서 Dictionary를 이용해 값을 바꾸는 방법

import pandas as pd import numpy as np df = pd.DataFrame({'col1':[10, 20, 10, 20, 30, 40], 'col2': ['US', 'BR','JP', 'KR', 'JP', np.nan]} ) dic = { 'US':"US10YT=RR" , 'GB':"GB10YT=RR" , 'KR':"KR10YT..

sseongju1.tistory.com

 

지금 내가 듣고 있는 코드잇 데이터 사이언스 입문

 

반응형

댓글