본문 바로가기
파이썬/데이터 다듬기

[240920] 데이터다듬기 #5 판다스 데이터프레임 변경(1)

by 황오독 2024. 9. 21.

학생때 열심히 공부하라는 말 좀 들을걸..
지나고나서야 깨닫습니다..ㅠ
 
1. 열 이름 변경
 1) 일부 열 이름 변경 : rename() 메서드
     ex) total_bill_amount => total_bill
           male_female => sex
 2) 모든 열 이름 변경 : colunms 속성 변경

tip.rename(columns = {'total_bill_amount':'total_bill',
                      'male_female':'sex'}, inplace=True)
                      
tip.columns = { 바꾸려는 열 이름 모두 }

 
2. 열 추가

# tip이라는 데이터프레임에
# final_amt 열 추가: final_amt = total_bill + tip
tip['final_amt'] = tip['total_bill'] + tip['tip']

# insert() 메서드를 사용하면 원하는 위치에 열 추가 가능
# tip 열 앞에 div_tb 열 추가
tip.insert(1, '열이름', 열 값)

 
3. 열 삭제 : drop()
  - 하나든 여러 열이든 변수에 대상열을 넣고 하는 것을 추천

# 열 하나 삭제: final_amt
drop_cols = ['final_amt'] # 변수에 대상열을 넣고 하는 것을 추천
tip.drop(drop_cols, axis=1, inplace=True)
# tip.drop(colums = drop_cols, inplace=True) # axis=1 대신

# 여러열 삭제: div_tb, day
drop_cols = ['div_tb', 'day']
tip.drop(columns = drop_cols, inplace=True)

 
 
4. 범주값 변경
 1) map() : df['x'] = df['x'].map({'A' : 1, 'B' : 2})
    => 매핑되지 못한 나머지 값은 모두 결측치

# Male -> 1, Female -> 0
tip['sex'] = tip['sex'].map({'Male':1, 'Female':0})

 
 2) replace() : df['x'] = df['x'].replace({'A' : 1, 'B' : 2})
    => 매핑되지 못한 나머지 값은 원래 값으로 남음

# Male -> 1, Female -> 0
tip['sex'] = tip['sex'].replace({1:'Male', 0:'Female'})

 
 
5. 범주값 만들기 (이산화-Discretization)
  1) cut() 함수 : 크기를 기준으로 구간 나눔

# 라이브러리 불러오기
import numpy as np

# 사분위 확인
tip.discribe()

# 등급 구하기
bin = [-np.inf, 2.0, 2.9, 3.5625, 10.0] # 25%, 50%, 75% 값 넣음
label = ['a', 'b', 'c', 'd']
tip['tip_grp'] = pd.cut(tip['tip'], bins=bin, labels=label)

# 확인
tip['tip_grp'].value_counts() # 경계값과 똑같은 값이 왼쪽으로 가서 개수가 다름.

 
2) qcut() 함수 : 개수를 기준으로 구간 나눔

# 같은 개수의 total_bill을 갖는 4개 구간으로 나누기
tip['bill_grp2'] = pd.qcut(tip['total_bill'], 4, labels=list('abcd'))

# 확인
tip.head()