본문 바로가기
Big Data/DataAnalysis & Manipulate

explode()와 melt() 그리고 Wide->Long 포맷 변환

by Wikinist 2023. 8. 11.

explode 함수

explode 함수는 리스트 형식의 데이터가 포함된 컬럼을 "폭발"시켜(long format으로 변환) 각 요소를 별도의 행으로 분리합니다.

시그니처

DataFrame.explode(column: str) -> DataFrame

column: 폭발시킬 컬럼의 이름을 지정합니다.

예제

import pandas as pd

data = {'id': [1, 2, 3],
        'items': [['item1', 'item2'], ['item3', 'item4'], ['item5', 'item6', 'item7']]}

df = pd.DataFrame(data)
df_long = df.explode('items')

melt 함수

melt 함수는 여러 컬럼을 long format으로 변환하여 열(column)을 행(row)으로 변환합니다.

시그니처

DataFrame.melt(id_vars=None, value_vars=None, var_name=None, value_name='value') -> DataFrame

id_vars: 고정할 컬럼(들)의 이름 또는 인덱스를 지정합니다.
value_vars: long format으로 변환할 컬럼(들)의 이름 또는 인덱스를 지정합니다.
var_name: 변환된 변수 열의 이름을 지정합니다. 기본값은 'variable'입니다.
value_name: 변환된 값 열의 이름을 지정합니다. 기본값은 'value'입니다.

예제

import pandas as pd

data = {'id': [1, 2, 3],
        'value1': [10, 20, 30],
        'value2': [100, 200, 300]}

df = pd.DataFrame(data)
df_long = df.melt(id_vars='id', value_vars=['value1', 'value2'], var_name='variable', value_name='value')

explode와 melt 함수는 각각 리스트 형식의 데이터와 여러 컬럼을 long format으로 변환하는데 사용되며, 데이터의 구조에 따라 적절한 함수를 선택하여 사용하시면 됩니다. 

wide format 형식 -> long format으로 변환

Pandas에서 wide format 형식의 데이터를 long format으로 변환하는 데에는 explode 함수와 melt 함수를 사용할 수 있습니다. 각각의 경우에 대해 설명해보겠습니다.

하나의 컬럼에 스트링 리스트 형식의 데이터

이 경우, 데이터가 하나의 컬럼에 스트링 리스트 형식으로 저장되어 있습니다. explode 함수를 사용하여 이를 long format으로 변환할 수 있습니다.

예를 들어, 아래와 같은 wide format의 데이터프레임이 있다고 가정해보겠습니다

import pandas as pd

data = {'id': [1, 2, 3],
        'items': [['item1', 'item2'], ['item3', 'item4'], ['item5', 'item6', 'item7']]}

df = pd.DataFrame(data)
print(df)

위 데이터프레임을 long format으로 변환하려면 다음과 같이 explode 함수를 사용합니다

df_long = df.explode('items')
print(df_long)

결과는 다음과 같이 각 아이템이 별도의 행으로 분리된 long format의 데이터프레임이 됩니다 

 id   items
0   1  item1
0   1  item2
1   2  item3
1   2  item4
2   3  item5
2   3  item6
2   3  item7

여러 컬럼에 각각의 데이터

이 경우, 여러 컬럼에 각각의 데이터가 저장되어 있습니다. melt 함수를 사용하여 이를 long format으로 변환할 수 있습니다.

예를 들어, 아래와 같은 wide format의 데이터프레임이 있다고 가정해보겠습니다

data = {'id': [1, 2, 3],
        'value1': [10, 20, 30],
        'value2': [100, 200, 300]}

df = pd.DataFrame(data)
print(df)

위 데이터프레임을 long format으로 변환하려면 다음과 같이 melt 함수를 사용합니다

df_long = df.melt(id_vars='id', value_vars=['value1', 'value2'], var_name='variable', value_name='value')
print(df_long)

결과는 다음과 같이 각 변수와 값을 나타내는 long format의 데이터프레임이 됩니다

 id variable  value
0   1   value1     10
1   2   value1     20
2   3   value1     30
3   1   value2    100
4   2   value2    200
5   3   value2    300

위 예시들을 참고하여, 각각의 경우에 explode 함수와 melt 함수를 사용하여 wide format 데이터를 long format으로 변환할 수 있습니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Big Data > DataAnalysis & Manipulate' 카테고리의 다른 글

Pandas에서 결측값을 다루기 위한 여러 함수  (0) 2023.08.11
DataFrame 열 위치 변경  (0) 2023.08.11
pandas series.str  (0) 2023.08.11
pandas 선택함수  (0) 2023.08.11
DataFrame groupby()  (0) 2023.08.11