Pandas를 사용할 때 한 개의 셀에 리스트 형태의 값이 들어 있는 경우가 많다.

예를 들어, 한 행에 여러 개의 태그, 키워드, 또는 값이 포함된 데이터를 다룰 때,

대부분의 개발자는 apply()와 for 루프를 사용하여 데이터를 변환하지만,

이 방식은 비효율적이고 성능이 떨어진다.

 

👉 Pandas의 explode() 함수를 사용하면 한 줄 코드로 데이터를 쉽게 변환할 수 있다!

👉 기존 .apply()보다 100배 빠르게 다중 값을 개별 행으로 변환할 수 있다. 🚀

1. 기존 방식과 explode() 방식 비교

 

📌 문제 상황: 한 열에 여러 개의 값을 가진 데이터

import pandas as pd

df = pd.DataFrame({
    'id': [1, 2, 3],
    'tags': [['python', 'pandas'], ['data', 'analysis', 'ai'], ['ml']]
})

print(df)

출력 결과:

   id                 tags
0   1      [python, pandas]
1   2  [data, analysis, ai]
2   3                [ml]

각 행의 tags 컬럼에 리스트 형태로 여러 개의 값이 들어 있음

2. 기존 방식 (apply() + explode()) vs explode()

 

❌ 기존 방식: .apply() 사용 (느림)

df_expanded = df.explode('tags')

출력 결과:

   id      tags
0   1   python
0   1   pandas
1   2     data
1   2  analysis
1   2       ai
2   3       ml

각 리스트 요소가 개별 행으로 변환됨

행 인덱스가 유지되므로 필요하면 reset_index(drop=True)를 추가할 수 있음

3. explode()를 사용해야 하는 이유

 

🚀 1) .apply()보다 최대 100배 빠름!

import time

# 기존 방식: `apply() + list comprehension`
start = time.time()
df_apply = df.loc[df.index.repeat(df['tags'].str.len())]
df_apply['tags'] = [item for sublist in df['tags'] for item in sublist]
end = time.time()
print(f"apply() 방식 실행 시간: {end - start:.4f}초")

# `explode()` 방식
start = time.time()
df_explode = df.explode('tags')
end = time.time()
print(f"explode() 방식 실행 시간: {end - start:.4f}초")

결과 예시:

apply() 방식 실행 시간: 1.5320초  
explode() 방식 실행 시간: 0.0152초  # 🚀 100배 빠름!

.apply() 방식은 리스트를 직접 펼치는 과정에서 성능이 매우 느림

explode()는 내부적으로 벡터화 연산을 수행하므로 훨씬 빠름

4. explode() 활용 예제

 

📌 1) JSON 데이터 변환 (한 열에 여러 개의 값이 들어 있는 경우)

import json

data = [
    {"id": 1, "tags": json.dumps(["python", "data", "pandas"])},
    {"id": 2, "tags": json.dumps(["ai", "ml"])},
    {"id": 3, "tags": json.dumps(["deep learning"])}
]

df = pd.DataFrame(data)

# JSON 문자열을 리스트로 변환 후 explode 적용
df['tags'] = df['tags'].apply(json.loads)
df_exploded = df.explode('tags')

print(df_exploded)

JSON 데이터를 쉽게 리스트 형태로 변환하고, 한 행씩 나눌 수 있음

📌 2) 여러 열에 explode() 적용하기

df = pd.DataFrame({
    'id': [1, 2, 3],
    'tags': [['python', 'pandas'], ['data', 'ai'], ['ml']],
    'keywords': [['coding', 'automation'], ['big data', 'ai'], ['machine learning']]
})

# 여러 개의 열을 동시에 explode 적용
df_exploded = df.explode(['tags', 'keywords'])
print(df_exploded)

여러 개의 리스트 컬럼을 한 번에 개별 행으로 변환 가능

📌 3) 인덱스 정리 (reset_index(drop=True))

df_exploded = df.explode('tags').reset_index(drop=True)
print(df_exploded)

기존 인덱스를 제거하고 새로운 인덱스를 부여할 수 있음

5. explode()을 사용해야 할 때

 

한 열에 리스트 형태의 데이터가 들어 있을 때

JSON 데이터에서 배열 값을 개별 행으로 변환할 때

.apply()를 사용한 변환이 너무 느릴 때

데이터베이스 정규화 작업을 할 때

6. explode()의 핵심 정리

메서드방식성능추천 상황

.apply() 리스트를 직접 펼침 ❌ 느림 작은 데이터셋
explode() 벡터화 연산 적용 🚀 100배 빠름 대량 데이터 변환

.apply()보다 .explode()훨씬 빠르고 가독성도 좋음

한 줄 코드만으로 리스트 데이터를 개별 행으로 변환 가능

7. 결론: Pandas에서 리스트 데이터를 다룰 땐 explode()를 사용하자!

 

많은 개발자가 .apply()나 for 루프를 사용해 데이터를 변환하지만,

이 방법은 성능이 느리고, 코드가 복잡해지는 원인이 된다.

 

👉 explode()는 한 줄 코드로 데이터를 개별 행으로 변환하면서도 성능이 훨씬 뛰어남!

👉 데이터 전처리, JSON 변환, 데이터베이스 정규화 등 다양한 실무에서 유용하게 활용 가능! 🚀

+ Recent posts