KT AIVLE SCHOOL 복습

KT AIVLE DX #2 - 데이터 다듬기(4) 데이터프레임 변경

전쏘스 2023. 3. 13. 17:45

 

1. 열 변경

1) 열 이름 변경

  • rename() 메소드를 사용해 변경 전 후의 열 이름을 딕셔너리 형태로 나열하는 방법 → inplace=True 를 주어야 실제 반영
df.rename(columns={'A': 'B',
                    'C': 'D',
                    inplace=True)
  • 모든 열 이름을 변경할 때는 columns 속성을 변경 → 변경이 필요 없는 열은 기존 이름을 부여해야 함!
# 기존 열 이름 : ['A', 'B', 'C']
# 변경하고자 하는 이름 : ['A', 'D', 'E']
df.columns = ['A', 'D', 'E']

2) 열 추가

  • 새로운 열을 추가하여 기존 데이터에서 계산된 결괏값을 저장하는 경우
df['new'] = df['A'] + df['B']
  • insert() 메소드를 사용해 원하는 위치에 열 추가 가능
df.insert(원하는 위치, 지정하고자하는 열 이름, 계산 식)

3) 열 삭제

  • 무언가를 삭제할 때는 항상 조심!!! 해야함
  • drop() 메소드를 사용해 열 삭제 → axis = 0 : 행 삭제 → axis = 1 : 열 삭제 → inplace = True : 옵션을 지정해야 실제 반영 → 여러 열 삭제할 시에는 리스트 형식으로 전달
# 열 하나 삭제: final_amt
tip.drop('final_amt', axis=1, inplace=True)

# 열 두 개 삭제: div_tb, day
tip.drop(['div_tb', 'holiday'], axis=1, inplace=True)

# 행삭제 1,2,3
row_x = [1,2,3]
tip.drop(row_x, axis=0, inplace=True)

 

2. 범주값 변경

  • map() : 매핑되지 못한 나머지 값은 결측치가 됨
  • replace() : 매핑되지 못한 값은 원래 값으로 남음
# 코드 사용법
df['x'] = df['x'].map({'A':1, 'B':2})

 

3. 범주값 만들기

  • 연속값을 구간을 나누어 범주값으로 표현하는 과정을 이산화라고 함
  • cut() , qcut() 을 사용해 쉽게 수행 가능
# 코드 사용법
bin = [-np.inf, 구간1, 구간2,..., np.inf]
label = [구간이름1, 구간이름2, 구간이름3, 구간이름4..]
df['column'] = pd.cut(df['column'], bins=bin, labels=label)

>> qcut()의 경우 bins를 따로 주지 않고, 구간 개수를 지정하면 됨

 

4. 결측치 처리

1) 결측치 찾기

  • info() 메소드로 확인
  • isnull(), notnull() 메소드 사용
  • df.isna().sum() 열의 결측치 개수를 확인 가능

2) 결측치 제거

  • dropna() 메소드로 결측치가 있는 열이나 행 제거 가능 → axis=0 : 행 제거 → axis=1 : 열 제거
  • subset='열이름' 옵션을 지정해 해당 열에 결측치가 있는 행 제거 가능
# 결측치가 하나라도 있는 행 제거
df.dropna(axis=0, inplace=True)

# 특정열의 결측치인 행 제거
df.dropna(subset='column', axis=0, inplace=True)

# 결측치가 있는 열 제거
df.dropna(axis=1, inplace=True)

3) 결측치 채우기

  • fillna() 메소드를 사용해 채우기 가능

a. 평균값으로 채우기

# Ozone 평균 구하기
mean_Ozone = air_test['Ozone'].mean()

# 결측치를 평균값으로 채우기
air_test['Ozone'].fillna(mean_Ozone, inplace=True)

b. 특정 값으로 채우기

# Solar.R 열의 누락된 값을 0으로 채우기
air_test['Solar.R'].fillna(0, inplace=True)

c. 직전 행 값, 또는 다음 행 값으로 채우기

# Ozone 열의 누락된 값을 바로 앞의 값으로 채우기
air_test['Ozone'].fillna(method='ffill', inplace=True)

# Solar.R 열의 누락된 값을 바로 뒤의 값으로 채우기
air_test['Solar.R'].fillna(method='bfill', inplace=True)

d. 선형보간법으로 채우기

# 선형보간법으로 채우기
air_test['Ozone'].interpolate(method='linear', inplace=True)

 

5. 가변수 만들기

  • 가변수는 일정하게 정해진 범위의 값을 갖는 데이터를 독립된 열로 변환하는 것
  • 범주형 문자열 데이터는 머신러닝 알고르지므에 사용하려면 숫자로 변환해야함
  • 가변수를 만드는 과정을 One-Hot-Encoding 이라고 부름
  • get_dummies() 함수를 이용해 쉽게 만들 수 있음
# 가변수화: sex 
# 이것은 머신러닝 마지막 전처리 과정으로 사용해주는 것이 좋다. 
# 왜냐 미리 가변수화를 해주면 우리가 시각화했을때 데이터 확인이 어렵! 
# 의미 파악이 어려워져서 우리가 탐색 완료한 뒤에 하는것!!!

tip = pd.get_dummies(tip, columns=['sex'], drop_first=True)

 

6. 데이터프레임 합치기

1) concat

  • concat() 함수를 이용해 인덱스 값을 기준으로 두 데이터프레임을 가로, 세로로 합칠 수 있음

a. 가로로 합치기

# 모든 행 합치기
pop = pd.concat([pop01,pop02], join='outer', axis=1)

b. 세로로 합치기

pop = pd.concat([pop01,pop02], join='outer', axis=0)

 

2) Merge

  • 두 데이터프레임을 지정한 키 값을 기준으로 병합
  • 2개의 데이터만!! 합칠 수 있다. (가로로)
  • on으로 옵션을 지정하여 같은 이름의 열을 가진 열을 기준으로 조인
pop = pd.merge(pop01, pop02, on='year', how='inner')