2025. 12. 2. 20:28ㆍTIL
데이터프레임에서 의미를 찾기 위해 여러 가지 방법으로 데이터프레임의 구조를 변형할 수 있다.
1. Transpose

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

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

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

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

인덱스 레벨을 컬럼으로 변환
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')
'TIL' 카테고리의 다른 글
| 251204_BootCamp Day 34_데이터프레임 고급 집계 이론 (0) | 2025.12.04 |
|---|---|
| 251203_BootCamp Day 33_머신러닝 기초 (2) (0) | 2025.12.03 |
| 251201_BootCamp Day 31_머신러닝 기초 (1) (2) | 2025.12.01 |
| 251128_BootCamp Day 30_데이터 분석 기초 프로젝트 (完) (1) | 2025.11.28 |
| 251127_BootCamp Day 29_데이터 분석 기초 프로젝트 (6) (0) | 2025.11.27 |