melt: 넓은 형식에서 긴 형식으로
pd.melt로 넓은 형식의 DataFrame을 긴 형식으로 변환하고 id_vars와 value_vars를 지정합니다.
melt: 넓은 형식에서 긴 형식으로은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
넓은 형식과 긴 형식의 데이터
데이터는 기본적으로 두 가지 형태로 구성할 수 있습니다. 넓은 형식은 대상마다 한 행을 사용하고 여러 열에 측정값을 펼칩니다. 예를 들어 1월, 2월, 3월 매출을 각각 별도의 열에 저장하는 방식입니다. 긴 형식은 관측값마다 한 행을 사용하며, 변수 이름을 위한 열과 값을 위한 열을 둡니다. 대부분의 Pandas 분석 함수, 기계 학습 라이브러리 및 시각화 도구는 긴 형식을 선호하므로 melt()는 필수적인 변환 도구입니다.
pd.melt() 함수
pd.melt(df)(df.melt()으로도 사용 가능)는 넓은 형식의 DataFrame을 긴 형식으로 변환합니다. 핵심 매개변수는 다음과 같습니다. id_vars(식별자로 유지할 열이며 변경되지 않음), value_vars(행으로 펼칠 열), var_name(새 변수 열의 이름), value_name(새 값 열의 이름)입니다.
import pandas as pd
# Wide format: separate columns per month
df_wide = pd.DataFrame({
'product': ['A', 'B'],
'Jan': [100, 150],
'Feb': [120, 130],
'Mar': [140, 160]
})
print(df_wide)
# product Jan Feb Mar
# 0 A 100 120 140
# 1 B 150 130 160기본 melt() 호출
식별자로 유지하려는 열을 id_vars에 지정하여 melt()를 호출하십시오. 나머지 모든 열은 펼쳐집니다. 열 이름은 새 변수 열의 값이 되고, 각 셀의 값은 값 열로 이동합니다. 출력 행 수는 입력 행 수에 펼치는 값 열의 수를 곱한 것과 같습니다.
df_long = df_wide.melt(
id_vars='product',
var_name='month',
value_name='sales'
)
print(df_long)
# product month sales
# 0 A Jan 100
# 1 B Jan 150
# 2 A Feb 120
# 3 B Feb 130
# 4 A Mar 140
# 5 B Mar 160melt할 열 선택하기
기본적으로 id_vars에 나열되지 않은 모든 열이 melt됩니다. value_vars를 사용하면 일부 열만 melt할 수 있습니다. id_vars나 value_vars에 포함되지 않은 열은 결과에서 삭제됩니다. 넓은 형식의 DataFrame에 시계열 열과 펼치고 싶지 않은 다른 속성이 함께 있을 때 유용합니다.
df_wide2 = pd.DataFrame({
'product': ['A', 'B'],
'category': ['Electronics', 'Clothing'],
'Jan': [100, 150],
'Feb': [120, 130],
'Mar': [140, 160]
})
# Melt only Jan and Feb, keep product and category
df_long2 = df_wide2.melt(
id_vars=['product', 'category'],
value_vars=['Jan', 'Feb'],
var_name='month',
value_name='sales'
)
print(df_long2)melt() 후 인덱스 재설정하기
melt()는 각 변수마다 원래 행 인덱스를 반복하여 원래 인덱스를 유지합니다. 따라서 결과에 [0, 1, 0, 1, 0, 1]과 같은 비연속 인덱스가 생기는 경우가 많습니다. melt() 직후 reset_index(drop=True)를 호출해 출력 인덱스를 0부터 n-1까지의 깔끔한 연속 인덱스로 만드는 것이 좋습니다.
df_long = df_wide.melt(id_vars='product', var_name='month', value_name='sales')
print('Before reset:', df_long.index.tolist())
# [0, 1, 0, 1, 0, 1]
df_long = df_long.reset_index(drop=True)
print('After reset:', df_long.index.tolist())
# [0, 1, 2, 3, 4, 5]melt()는 pivot()의 역연산입니다
melt()는 개념적으로 pivot() / pivot_table()의 반대 작업입니다. pivot_table()을 사용하면 긴 형식에서 넓은 형식으로, melt()를 사용하면 넓은 형식에서 다시 긴 형식으로 변환할 수 있습니다. 이러한 왕복 변환은 파이프라인에서 자주 사용됩니다. 넓은 형식으로 받은 데이터를 시본 시각화나 기계 학습 특성에 사용하기 위해 긴 형식으로 바꾼 다음, 필요하면 보고서용 표를 만들기 위해 다시 피벗하는 방식입니다.
# long -> wide
table = df_long.pivot_table(values='sales', index='product',
columns='month', aggfunc='sum')
print(table)
# product Feb Jan Mar
# A 120 100 140
# B 130 150 160
# wide -> long again
long_again = table.reset_index().melt(id_vars='product', var_name='month', value_name='sales')
print(long_again.head())Seaborn 시각화에 melt() 사용하기
Seaborn의 범주형 플롯과 관계형 플롯은 긴 형식의 데이터에서 가장 잘 작동합니다. 일반적인 작업 흐름은 다음과 같습니다. 먼저 그룹마다 열이 하나씩 있는 넓은 형식의 DataFrame으로 시작하고, 한 열에는 그룹을 식별하는 값이, 다른 열에는 값이 들어가도록 melt하여 긴 형식으로 변환합니다. 그런 다음 두 열을 Seaborn의 hue 및 x/y 매개변수에 전달합니다. 이것이 melt()를 사용하는 가장 일반적인 이유 중 하나입니다.
import seaborn as sns
import matplotlib.pyplot as plt
# Long format is required for sns.lineplot with hue
df_long = df_wide.melt(id_vars='product', var_name='month', value_name='sales')
# sns.lineplot(data=df_long, x='month', y='sales', hue='product')
# plt.show()
print('Long data ready for Seaborn:')
print(df_long)출력 열 이름 지정
기본적으로 melt()는 새 변수 열의 이름을 'variable'로, 값 열의 이름을 'value'로 지정합니다. 항상 var_name과 value_name을 사용하여 의미 있는 이름으로 재정의하십시오. 설명적인 열 이름을 사용하면 이후 코드가 읽기 쉬워지고, DataFrame에 열이 수십 개 있을 때 혼동을 방지할 수 있습니다.
# Default: generic column names 'variable' and 'value'
default = df_wide.melt(id_vars='product')
print(default.columns.tolist())
# ['product', 'variable', 'value']
# Better: descriptive names
good = df_wide.melt(id_vars='product', var_name='month', value_name='revenue_usd')
print(good.columns.tolist())
# ['product', 'month', 'revenue_usd']설문 데이터 변환하기
melt()의 전형적인 사용 사례는 각 열이 질문이고 각 행이 응답자인 설문 응답 데이터입니다. melt하면 넓은 형식이 응답자 ID, 질문 이름, 답변 값 열을 포함하는 긴 형식으로 변환됩니다. 그런 다음 groupby()를 사용하여 질문별 답변 분포를 쉽게 계산할 수 있습니다.
survey = pd.DataFrame({
'respondent': [1, 2, 3],
'Q1_rating': [5, 3, 4],
'Q2_rating': [4, 5, 3],
'Q3_rating': [2, 4, 5]
})
long = survey.melt(id_vars='respondent', var_name='question', value_name='rating')
print(long)
print(long.groupby('question')['rating'].mean())변환된 결과 정렬하기
melt한 후에는 각 행에 대해 원래 열 순서(1월, 2월, 3월)로 행이 정렬됩니다. 식별자 열을 먼저 정렬한 다음 변수 열을 정렬해야 하는 경우가 많습니다. 변환된 DataFrame에 sort_values()를 사용하면 분석이나 이후 처리에 가장 적합한 순서로 정렬할 수 있습니다.
df_long = df_wide.melt(id_vars='product', var_name='month', value_name='sales')
# Sort by product, then month
df_sorted = df_long.sort_values(['product', 'month']).reset_index(drop=True)
print(df_sorted)
# product month sales
# 0 A Feb 120
# 1 A Jan 100
# 2 A Mar 140
# 3 B Feb 130
# 4 B Jan 150
# 5 B Mar 160데이터 파이프라인에서 melt() 사용하기
일반적인 데이터 파이프라인에서는 넓은 형식의 데이터를 불러오거나 정리한 직후, 분석이나 모델링 단계 전에 melt()가 사용됩니다. 파이프라인 초기에 배치하여 빠르게 긴 형식으로 변환하면, 이후의 모든 작업(groupby, 시본, 사이킷런)이 별도의 예외 처리 없이 정리된 긴 형식 데이터에서 작동합니다.
def load_and_reshape(filepath):
raw = pd.read_csv(filepath)
# Melt all month columns into long format
month_cols = [c for c in raw.columns if c.startswith('month_')]
long = raw.melt(
id_vars=[c for c in raw.columns if c not in month_cols],
value_vars=month_cols,
var_name='month',
value_name='value'
)
return long.reset_index(drop=True)빠른 확인
이 수업에서 배운 pd.melt의 넓은 형식에서 긴 형식으로의 변환에 대한 이해도를 확인해 보십시오.
수업 요약
이 수업에서는 다음을 배웠습니다. melt()는 열을 행으로 변환하여 넓은 형식을 긴 형식으로 바꿉니다. id_vars는 고정된 상태로 유지할 열을 지정하고, value_vars는 melt할 열을 선택합니다. var_name과 value_name은 새 열에 설명적인 이름을 부여합니다. 또한 긴 형식은 Seaborn, groupby, 머신러닝 파이프라인에 적합합니다. 다음으로는 MultiIndex DataFrames의 형태를 바꾸는 stack과 unstack을 살펴보겠습니다.
AI 튜터와 함께 Python을(를) 배우세요 — 무료
브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.
- 코스
- 30
- 레슨
- 120
자주 묻는 질문
“melt: 넓은 형식에서 긴 형식으로” 강의는 무료인가요?
네 — “melt: 넓은 형식에서 긴 형식으로” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“melt: 넓은 형식에서 긴 형식으로”에서 뭘 배우나요?
pd.melt로 넓은 형식의 DataFrame을 긴 형식으로 변환하고 id_vars와 value_vars를 지정합니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“melt: 넓은 형식에서 긴 형식으로” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- pivot_table: 교차 집계
- melt: 넓은 형식에서 긴 형식으로
- MultiIndex에서 stack과 unstack 사용하기
- 빈도표에 crosstab 사용하기