Pandas 열의 리스트 요소를 각각 행으로 변환하는 방법
먼저, 리스트를 포함하는 Pandas 열을 만들어야 합니다. 예를 들어 다음과 같은 데이터프레임이 있다고 가정해봅시다.
import pandas as pd
data = {'animal': ['dog', 'cat', 'bird'], 'colors': [['brown', 'white'], ['black', 'orange'], ['yellow', 'blue']]}
df = pd.DataFrame(data)
print(df)
animal colors
0 dog ['brown', 'white']
1 cat ['black', 'orange']
2 bird ['yellow', 'blue']
방법 1: explode()
함수 사용
Pandas에는 explode()
함수를 사용하여 리스트를 각 요소별 행으로 변환하는 간편한 방법이 있습니다.
df_exploded = df.explode('colors')
print(df_exploded)
animal colors
0 dog brown
0 dog white
1 cat black
1 cat orange
2 bird yellow
2 bird blue
방법 2: 리스트 추출 및 새로운 행 생성
for
루프를 사용하여 리스트 요소를 추출하고 새로운 행을 생성하는 방법도 있습니다.
def explode(df, col_name):
new_df = pd.DataFrame()
for i in range(len(df)):
row = df.iloc[i]
for element in row[col_name]:
new_row = row.copy()
new_row[col_name] = element
new_df = new_df.append(new_row, ignore_index=True)
return new_df
df_exploded = explode(df.copy(), 'colors')
print(df_exploded)
animal colors
0 dog brown
0 dog white
1 cat black
1 cat orange
2 bird yellow
2 bird blue
주의 사항
explode()
함수는 데이터프레임의 행 수가 크게 증가할 수 있으므로 주의해야 합니다.- 리스트 요소가 여러 열로 구성된 경우
explode()
함수를 여러 번 사용하거나 좀 더 복잡한 방법을 사용해야 할 수도 있습니다.
예제 코드
import pandas as pd
data = {'animal': ['dog', 'cat', 'bird'], 'colors': [['brown', 'white'], ['black', 'orange'], ['yellow', 'blue']]}
df = pd.DataFrame(data)
df_exploded = df.explode('colors')
print(df_exploded)
import pandas as pd
def explode(df, col_name):
new_df = pd.DataFrame()
for i in range(len(df)):
row = df.iloc[i]
for element in row[col_name]:
new_row = row.copy()
new_row[col_name] = element
new_df = new_df.append(new_row, ignore_index=True)
return new_df
data = {'animal': ['dog', 'cat', 'bird'], 'colors': [['brown', 'white'], ['black', 'orange'], ['yellow', 'blue']]}
df = pd.DataFrame(data)
df_exploded = explode(df.copy(), 'colors')
print(df_exploded)
출력
animal colors
0 dog brown
0 dog white
1 cat black
1 cat orange
2 bird yellow
2 bird blue
설명
방법 1:
pandas
라이브러리를 불러옵니다.data
라는 딕셔너리를 정의합니다. 딕셔너리에는 'animal'과 'colors'라는 두 개의 키가 있습니다. 'animal' 키는 동물 이름을, 'colors' 키는 각 동물의 색상 목록을 포함합니다.data
딕셔너리를 사용하여df
라는 데이터프레임을 만듭니다.explode()
함수를 사용하여 'colors' 열을 분리합니다.- 결과는 'animal' 및 'colors' 열을 포함하는 새로운 데이터프레임입니다.
explode
함수를 정의합니다. 이 함수는 데이터프레임과 분리할 열 이름을 입력 매개변수로 받습니다.for
루프를 사용하여 'colors' 열의 각 행을 반복합니다.- 각 반복에서 현재 행의 사본을 만들고 'colors' 열을 현재 색상 요소로 설정합니다.
- 새로운 행을
new_df
데이터프레임에 추가합니다. explode
함수를 호출하여 'colors' 열을 분리하고 결과를df_exploded
변수에 저장합니다.
Pandas 열의 리스트 요소를 각각 행으로 변환하는 대체 방법
방법 3: itertools.chain.from_iterable()
사용
import pandas as pd
from itertools import chain
data = {'animal': ['dog', 'cat', 'bird'], 'colors': [['brown', 'white'], ['black', 'orange'], ['yellow', 'blue']]}
df = pd.DataFrame(data)
df_exploded = pd.DataFrame(chain.from_iterable([[animal, color] for animal, colors in df[['animal', 'colors']].itertuples() for color in colors]))
df_exploded.columns = ['animal', 'colors']
print(df_exploded)
방법 4: numpy.array
및 reshape
사용
import pandas as pd
import numpy as np
data = {'animal': ['dog', 'cat', 'bird'], 'colors': [['brown', 'white'], ['black', 'orange'], ['yellow', 'blue']]}
df = pd.DataFrame(data)
arr = np.array(df['colors'].tolist())
df_exploded = pd.DataFrame(arr.reshape(-1, 2), columns=['animal', 'colors'])
print(df_exploded)
방법 5: map()
함수 및 리스트 이해 사용
import pandas as pd
data = {'animal': ['dog', 'cat', 'bird'], 'colors': [['brown', 'white'], ['black', 'orange'], ['yellow', 'blue']]}
df = pd.DataFrame(data)
def explode(row):
return [(row['animal'], color) for color in row['colors']]
df_exploded = pd.DataFrame(list(map(explode, df.itertuples())))
df_exploded.columns = ['animal', 'colors']
print(df_exploded)
각 방법의 장단점
방법 | 장점 | 단점 |
---|---|---|
explode() 함수 | 간결하고 사용하기 쉬움 | 데이터프레임의 행 수가 크게 증가할 수 있음 |
리스트 추출 및 새로운 행 생성 | 더 많은 제어 가능성 | 코드가 더 복잡할 수 있음 |
itertools.chain.from_iterable() | 함수형 프로그래밍 스타일을 선호하는 사용자에게 유용 | 코드가 이해하기 어려울 수 있음 |
numpy.array 및 reshape 사용 | 빠른 속도 | NumPy를 사용하는 데 익숙해야 함 |
map() 함수 및 리스트 이해 사용 | 함수형 프로그래밍 스타일을 선호하는 사용자에게 유용 | 코드가 이해하기 어려울 수 있음 |
선택 가이드
데이터프레임의 크기, 코드의 가독성, 개인적인 선호도 등을 고려하여 상황에 맞는 방법을 선택하는 것이 중요합니다.
python pandas list