[Data Analysis] Ch 7. 데이터 준비하기: 다듬기, 변형, 병합

fla1512·2023년 2월 2일
0

Python Study

목록 보기
2/6

python for data analysis 책의 7장을 참고하여 작성하였습니다

7.3 데이터 변형

7.3.1 중복 제거하기

  1. 데이터 만들기
import pandas as pd
data=pd.DataFrame({'k1':['one']*3 + ['two']*4,
                  'k2':[1,1,2,3,3,4,4]})
data
  1. 중복 제거하기(기본)
data.drop_duplicates()
  1. 특정 컬럼을 기준으로 중복 제거하기
data['v1']=range(7)
# 특정 컬럼에 기반해서 중복을 걸러내기
data.drop_duplicates(['k1'])
  1. 중복 제거 시 마지막 값을 남기기
data.drop_duplicates(['k1','k2'], keep='last') # 마지막 값을 남기기

7.3.2 함수, 매핑으로 데이터 변형하기

  1. 데이터 프레임 만들기
import pandas as pd
data=pd.DataFrame({'food':['bac','pulled pork', 'bac', 'pas','pas', 'bac', 'pas', 'honey', 'nova'],
                  'ounces':[4,3,12,6,7.5,8,3,5,6]})
data
  1. 바꿀 컬럼 만들기(딕셔너리)
meat_to_animal ={
    'bac':'pig',
    'pulled pork':'pig',
    'pas':'cow',
    'honey':'pig',
    'nova':'salmon'
}
  1. 변경하기
data['animal']=data['food'].map(lambda x: meat_to_animal[x.lower()])
data

7.3.3 값 치환하기

여러 개의 값을 한 번에 치환하고 싶다면?

  1. 데이터 만들기
from pandas import Series
import numpy as np

data=Series([1., -999., 2., -999., -1000., 3.])
data
  1. 방법1
data.replace([-999,-1000], [np.nan,0])
  1. 방법2
data.replace({-999:np.nan, -1000:0})

rename도 활용 가능(비슷한 원리로 쓰임)

7.3.5 개별화와 양자화

  1. 데이터 만들기 및 cut으로 자르기
ages=[20,22,25,27,21,23,37,31,61,45,41,32]

bins =[18,25,35,60,100]

cats=pd.cut(ages, bins, right=True) # right=False로 괄호와 대괄호 위치 변경 가능
cats
cats.codes
cats.categories
  1. 개수 분포 확인하기
pd.value_counts(cats)
  1. 나눌때 특정 이름 지정해서 나누기
group_names=['Youth','YoungAdult','MiddleAge','Senior']
pd.cut(ages,bins,labels=group_names)
  1. 그룹의 개수를 넘겨주어, 데이터에서 최소 최대 기준으로 균등한 길이의 그룹 자동 계산
data=np.random.rand(20)
pd.cut(data,4,precision=2)
  1. qcut: 표본 변위치를 기반으로 데이터를 나누는 함수
data=np.random.rand(1000)

cats=pd.qcut(data,4)
cats
  1. 변위치 직접 지정하기(0~1)
pd.qcut(data, [0,0.1,0.5,0.9,1.])

7.3.8 표시자/더미 변수

더미나 표시 행렬로 변환하기, dataframe의 한 컬럼이 여러 카테고리에 속한다면 어떻게?
1. 데이터 부르기

mnames=['movie_id','title','genres']
movies=pd.read_table('pydata-book/datasets/movielens/movies.dat',
                    sep='::', header=None, names=mnames)
movies[:10]
  1. 더미로 만들 값들 모으기
genre_iter=(set(x.split('|')) for x in movies.genres)
genres=sorted(set.union(*genre_iter))
genres
  1. 빈 데이터프레임 만들기
dummies=pd.DataFrame(np.zeros((len(movies),len(genres))), columns=genres)
dummies
  1. 합쳐주기
for i, gen in enumerate(movies.genres):
    dummies.loc[i, gen.split('|')]=1
movies_windic = movies.join(dummies.add_prefix('Genre_'))
movies_windic

0개의 댓글