1. 데이터 재형성과 피벗
: 테이블 형식의 데이터는 다양한 방식과 기준으로 데이터를 재배치(피벗)하는 것이 가능
: 판다스에 이러한 연산이 가능한 함수 있음
▶ 라이브러리 설치 및 가져오기
import pandas as pd
import numpy as np
2. 열을 인덱스로 교환하기
: 열을 인덱스로 교환하여 데이터를 재배치(피벗)할 수 있음
: stack()과 unstack() 함수 사용
▶ coffee_size_data 만들기
coffee_size_data = pd.DataFrame([[10, 28], [8, 22]],
index = ['스타벅스', '커피빈'],
columns = ['테이블 수', '매장 규모(평)'])
coffee_size_data
▶ .stack( ) / .unstack( )
* stack()
: 데이터의 열을 인덱스로 만듦
coffee_size_data.stack()
* unstack()
: 다시 원래대로 돌리기
coffee_size_data.stack().unstack()
3. 데이터 재배치(피벗)하기
▶ 주식 데이터 로드
data_stock = pd.read_csv('./datasets/stock_data.csv')
data_stock.head()
▶ pivot()
: 매개변수 index = , columns = , values = 를 각각 지정하여 다양한 관점에서 데이터를 볼 수 있음
* index = 회사명, columns = 날짜, values = 거래량
data_stock.pivot(index = 'symbol', columns = 'date', values = 'volume')
* index = 날짜, columns = 회사명, values = 종가
data_stock.pivot(index = 'date', columns = 'symbol', values = 'close')
▶ pivot_table()
: pivot() 함수와 동일한 집계 결과를 생성할 수 있음
: 매개변수도 pivot() 함수와 대부분 동일함
pd.pivot_table(data_stock, values = 'close', index = 'date', columns = 'symbol')
4. 넓은 형태의 데이터를 긴 형태로 재형성
▶ melt()
: pivot()과 반대 개념
: pivot()은 지정한 열을 기준으로 데이터프레임을 생성함(데이터 재형성)
: 반면 melt()는 사용자가 지정한 하나의 컬럼을 제외하고 나머지 컬럼들을 하나의 [변수]와 [값]으로 병합함
* data_s 만들기
data_s = pd.DataFrame({'음식명' : ['돈가스', '우동', '냉면'],
'평점' : [4.3, 4.2, 4.6],
'가격' : [10000, 9000, 12000],
'위치' : ['삼성동', '명동', '을지로입구']})
data_s
▶ melt('기준key')
data_s.melt('음식명')
: '음식명' 열을 기준으로 모든 열을 하나의 변수, 값으로 축소함
>> '음식명'을 제외한 '평점', '가격', '위치'가 variable(변수) 열에 들어가고, 각 값이 value(값)에 들어가 있음
▶ 매개변수 id_vars, value_vars / var_name. value_name
* id_vars / value_vars : [전체 열]이 아닌 [부분 열]만 가져올 때 사용
* var_name / value_name : melt()로 생성되는 열 이름을 바꿀 때 사용
data_s.melt(id_vars = ['음식명'], value_vars = ['가격', '위치'], var_name = '항목명', value_name = '항목값')
▶ melt()로 재구성된 데이터프레임 되돌리기 → pivot()
data_s.melt('음식명').pivot('음식명', 'variable', 'value')
* reset_index()
: 숫자 인덱스를 새롭게 생성할 때 사용
data_s.melt('음식명').pivot('음식명', 'variable', 'value').reset_index()
5. 복합 개체를 개별 개체로 분리
▶ explode()
: 데이터에 복합적인 값이 들어 있을 때는 복합 개체를 개별 개체로 분리해야 함
: explode() 함수 사용
: 기본적으로 1개의 열을 기준으로 데이터 분리
* data_e 만들기
data_e = pd.DataFrame({'재료' : [['밀가루', '설탕', '계란'], '밀가루', [], ['버터', '생크림']],
'시간' : 10,
'방식' : [['굽기, 볶기'], np.nan, [], ['볶기', '섞기']]})
data_e
▶ 복합 개체 분리하기
* '재료' 데이터 분리하기
data_e.explode('재료')
* '재료', '방식' 데이터 분리하기
data_e.explode('재료').explode('방식')
댓글