본문 바로가기

Python 파이썬

파이썬 데이터프레임 - pandas 기초(4-1)

4. 데이터프레임 변경

# 라이브러리 불러오기
import pandas as pd
import numpy as np
import seaborn as sns

# 타이타닉 데이터 불러오기
titanic = sns.load_dataset(('titanic'))

# survived, pclass, sex, age 컬럼만 조회할 수 있는 데이터 프레임 생성
df = titanic[['survived','pclass','sex','age']]
df

 

4.1.1 컬럼명 변경

 

  • 모든 컬럼명 변경

- 변경할 컬럼명을 리스트로 생성 후, 리스트를 데이터프레임 컬럼명에 대입해준다.

li = ['생존', '티켓클래스', '성별', '나이']
df.columns = li
df.head()

=> 리스트 li 바꿔줄 컬럼명을 넣고, 그 리스트 li를 데이터프레임 df 컬럼에 대입한다.

=> df.columns : df의 컬럼

 

  • 특정 컬럼명 변경 : rename()
# 컬러명 변경, reanme(columns={}, inplace=True)
df.rename(columns={'sex':'성별',
	    	   'age':'나이'}, inplace = True)

=> 'sex' 컬럼은 성별, 'age' 컬럼은 나이로 변경. (딕셔너리 대입)

=> 변경된 내용을 저장하기 위해서는 inplace = True 옵션 적용

 

 

 

4.1.2 컬럼 추가

 

  • 새로운 컬럼 생성
df['연령대'] = df['age'] // 10 * 10
df

=> age 컬럼을 이용해서 연령대 컬럼을 생성함

 

  • insert()를 사용하여 추가
# insert()를 사용하여 컬럼 추가
df.insert(1, '클래스100', df['pclass']*100)
df

=> 1번째 자리에  pclass 값에서 * 100을 한 클래스100 컬럼 생성

=> 1번째 자리라는 것은 0 1 2 3 4 중 1에 컬럼을 생성한다는 의미

 

 

4.1.3 컬럼 삭제

# drop(), 클래스100 컬럼 삭제
df.drop('클래스100', axis=1)

=> 클래스100 컬럼 삭제

 

# drop(), 클래스100 컬럼 삭제
df.drop(['성별','클래스100'], axis=1)

=> 성별, 클래스100 컬럼 삭제

=> 리스트를 이용하여 여러 컬럼 삭제 가능

 

 

4.1.4 범주값 변경

 

  • map()
# map() 메소드로 성별 숫자로 변경
df['sex'] = df['sex'].map({'male':1,'female':0})
df

=> map() 메소드 사용하여 female은 0, male은 1로 변경함.

=> map() 옵션으로 변경할 내용을 딕셔너리로 작성

 

  • replace()
# replace() 메소드로 1,0을 남,여로 변경
df['sex'] = df['sex'].replace({1:'남', 0:'여'})
df

=> replace() 메소드를 사용하여 1은 남, 0은 여로 변경함.

=> replace() 옵션으로 변경할 내용을 딕셔너리로 작성

 

 

4.1.5 구간 나눠서 범주값 생성

# 타이타닉 fare 데이터, df에 요금으로 추가
df['요금'] = titanic['fare']
df

- cut() : 크기를 기준으로 나눔

 

  • 4 구간으로 나누기
# 4구간으로 나누기
df['요금'] = pd.cut(df['요금'], 4)

df['요금']

=> 결과 밑을 확인하면, 4구간으로 나누어진 것을 확인할 수 있음

 

  • 분위수로 나누기

          1) 분위수 확인

# 분위수 확인
df['요금'].describe()

          2) 분위수 범위 저장, 명칭 지정

# 분위수를 변수에 저장
q1 = df['요금'].describe()['25%']
q2 = df['요금'].describe()['50%']
q3 = df['요금'].describe()['75%']

# 분위수 범위
b = [-np.inf, q1, q2, q3, np.inf]

# 분위수에 따른 명칭 
l = ['silver','gold','vip','vvip']

          3) 구간 나누기

df['요금'] = pd.cut(df['요금'], bins=b, labels=l)

df

=> 분위수로 나누기 위해, describe() 메소드를 사용하여 확인

=> 각 분위수를 변수에 넣고, 범위를 어떤 이름(라벨)으로 지정할지 정함    

=> ( ** np.inf : 무한대 )

=> pd.cut(데이터, 구간, 라벨) 메소드를 이용하여 구간을 나눠 지정한 이름으로 변경함.

=> bins : 구간 범위 정하기, labels = 구간 이름 정하기

 

- qcut() : 개수를 기준으로 나눔

 

# 개수를 기준으로 나누기
df['age'] = pd.qcut(df['age'], 4)

# 구간별 개수 확인
df['age'].value_counts()

=> 데이터 전체 수를 4로 나눠서 구간을 생성한다.

=> cut은 데이터 크기(값)를 기준으로 나누고, qcut은 데이터 수를 기준으로 나눔