[Python] 연습

[python] 리스트 형태의 값을 분리하여 각 하나의 값으로 표현하기

Simon Yoon 2022. 11. 12. 22:40

제목만 보면 어떤 말인지 이해하기 어려울 수 있으나,

아래의 예시 데이터처럼 값에 리스트가 들어가 있는 경우, 각 리스트 내 요소를 전개하여 따로 레코드를 생성해 주는 방법에 대한 것입니다.

예시 데이터(좌측)와 목표 데이터 형태(우측)

 

이럴 때는 pandas 의 explode() 함수를 사용해주면 됩니다.

( pandas explode document 링크 )


1. 예시 데이터 생성

import pandas as pd

data = [[3, 1, ['가', '나', '다']], [4, 0, ['라', '마', '바']], [5, 1, ['아', '자', '차']]]
col_names = ['x1', 'x2', 'x3']

df = pd.DataFrame(data=data, columns=col_names)
df

예시 데이터

2. explode 사용

'x3'에 리스트 형태의 값이 들어 있으므로 리스트의 각 요소를 전개하여 새로운 행으로 생성하겠습니다.

df.explode('x3')

explode() 를 사용하면 위와 같은 결과를 얻을 수 있습니다.

3. explode 에서 ignore_index 사용

위의 결과 데이터를 보면 각 레코드의 인덱스는 0, 0, 0, 1, 1, 1, 2, 2, 2 라고 되어있습니다.

만약 이를 0~9까지 순서대로 인덱싱 하려면 explode() 함수 사용시에 ignore_index 를 사용해줍니다.

df.explode('x3', ignore_index=True)