251202_BootCamp Day 32_데이터프레임 구조 변형

2025. 12. 2. 20:28TIL

데이터프레임에서 의미를 찾기 위해 여러 가지 방법으로 데이터프레임의 구조를 변형할 수 있다.

1. Transpose

https://www.geeksforgeeks.org/maths/transpose-of-a-matrix/

 

DataFrame의 행과 열을 전치 (행 ↔ 열)
DataFrame의 각 컬럼 별로 어떤 값이 들어있는지 빠르게 파악하기 위해 사용

import pandas as pd
import numpy as np
import time

df2 = pd.read_csv("customer_details.csv")

df2.T

데이터프레임이 거대한 경우 transpose가 오래 걸릴 수 있기 때문에, 간단히 파악하기 위해서는 head나 tail을 사용해 데이터 양을 줄이면 된다.

df2.head(1).T

2. Pivot Table

https://pandas.pydata.org/docs/user_guide/reshaping.html

 

DataFrame을 특정 열을 기준으로 요약하고, 새로운 형태의 표로 반환

  • index : 인덱스(축)로 사용할 열
  • columns : Pivot table의 열(컬럼)로 사용할 열
  • values : 값으로 사용할 열
  • aggfunc : 연산 방식 (sum, mean, std, count, nunique, max, min 등)
  • index, values, aggfunc은 필수로 들어가야 하는 parameter이다.
df2 = pd.pivot_table(df2, 
                     index='Payment Method', 
                     columns=['Size', 'Season'],
                     values='Customer ID',
                     aggfunc='count')

3. Melt

https://www.inflearn.com/community/questions/453877/stack%EA%B3%BC-melt%EC%9D%98-%EC%B0%A8%EC%9D%B4?srsltid=AfmBOoqiOp9iWtckHa46WckX4O4mjWLJ9yhf1v4b6eNlc2yFw7OuFvTj

 

DataFrame의 컬럼을 열로 바꿔주는 메서드
id로 지정한 컬럼을 제외한 나머지 컬럼의 자료를 위에서 아래로 쌓아준다.

  • id_vars : 기준이 될 열 (그대로 유지할 열)
  • value_vars : id_vars로 정한 열에 대한 하위 카테고리를 나열할 열
  • var_name : value_vars로 정한 카테고리로 나열할 열의 이름 설정
  • col_level : multi index의 경우 melt를 수행한 레벨을 설정
  • ignore_index : 인덱스를 1, 2, 3, ..., n으로 설정할지 여부 결정 (기본값 = True)
  • id_vars는 필수로 들어가야 하는 parameter이다.
df2.melt(id_vars=['Location'])
df2.melt(id_vars=['Location'],
         value_vars=['Frequency of Purchases'],
         var_name='Frequency of Purchases')
df2.melt(id_vars='Gender', value_vars=['Location', 'Size'])

4. Stack

https://www.inflearn.com/community/questions/453877/stack%EA%B3%BC-melt%EC%9D%98-%EC%B0%A8%EC%9D%B4?srsltid=AfmBOoqiOp9iWtckHa46WckX4O4mjWLJ9yhf1v4b6eNlc2yFw7OuFvTj

 

DataFrame의 컬럼을 인덱스로 바꿔주는 메서드
특히 멀티인덱스로 이루어진 DataFrame의 경우, 특정 level의 컬럼을 인덱스로 바꿀 수 있다.

  • level : stack을 수행할 컬럼 레벨을 지정
  • dropna : stack을 수행한 결과에서 결측값을 제거할지 여부를 결정 (기본값 = True)
df22 = df2[['Category', 'Season', 'Purchase Amount (USD)', 'Review Rating']].copy()
df22.columns = pd.MultiIndex.from_tuples([('Purchase', 'Amount'),
                                          ('Purchase', 'Review'),
                                          ('Info', 'Category'), 
                                          ('Info', 'Season')])

df22.stack(level=0, future_stack=True)
df22.stack(level=1, future_stack=True)
df22.stack(level=-1, future_stack=True)

5. Unstack

https://medium.com/@u.praneel.nihar/part1-stack-unstack-2060af57b4a0

인덱스 레벨을 컬럼으로 변환
Stack의 반대 개념

unstack(-1)은 가장 안쪽에 있는 인덱스의 데이터를 컬럼화한다.
unstack(1)은 명시적으로 1번째(순서상으로는 2번째) 인덱스의 데이터를 컬럼화한다.

df222.unstack(0)
df222.unstack(1)
df222.unstack(-1)

6. Pandas에서 DataFrame의 output이 짤릴 때 해결할 수 있는 방법

# 1. 컬럼 개수 제한 제거
pd.set_option('display.max_columns', None)
# None 대신 숫자를 넣으면 보고 싶은 컬럼 개수 제한을 설정할 수 있다.
# 2. 행 개수 제한 제거
pd.set_option('display.max_rows', None)
# 3. 컬럼 안의 내용 길이 제한 제거
pd.set_option('display.max_colwidth', None)
# 설정 되돌리기
pd.reset_option('display.max_columns')
pd.reset_option('display.max_rows')
pd.reset_option('display.max_colwidth')