728x90
데이터를 다루다 보면 한 셀에 리스트나 튜플 형태로 여러 값이 들어 있는 경우가 많다.
예를 들어:
- 상품 태그: ['전자제품', '스마트폰']
- 사용자가 선택한 옵션 목록: ['블랙', '128GB']
- JSON 데이터를 Pandas로 파싱했더니 list가 그대로 들어옴
이런 경우, 분석을 하려면 반드시 각 항목을 행 단위로 분해해야 한다.
explode()는 바로 이런 상황을 위해 탄생한 함수다.
예제 데이터
import pandas as pd
df = pd.DataFrame({
'user_id': [101, 102, 103],
'tags': [['A', 'B'], ['C'], []]
})
기본 문법
df.explode(column, ignore_index=False)
- column: 리스트가 들어있는 컬럼
- ignore_index: True일 경우 인덱스를 재정렬
1. 예제: 기본 explode() 사용
df.explode('tags')
- 리스트 항목이 각각 행으로 펼쳐짐
- 빈 리스트는 NaN으로 처리됨
- 기존 인덱스가 유지됨
2. 예제: 인덱스 재정렬 (ignore_index=True)
df.explode('tags', ignore_index=True)
→ 결과 인덱스를 새로 부여하고 싶을 때 사용
3. 예제: 여러 컬럼 조합에서 explode
df = pd.DataFrame({
'user_id': [201, 202],
'tags': [['A', 'B'], ['C']],
'scores': [[100, 90], [85]]
})
df.explode(['tags', 'scores'])
→ 각 리스트 길이가 같아야 정상 작동! 다르면 ValueError 발생
4. 예제: JSON 파싱 후 explode
df = pd.DataFrame({
'user_id': [301, 302],
'likes': [['python', 'pandas'], ['numpy']]
})
df.explode('likes')
→ 크롤링/로그/REST API 결과 등 리스트 형태 데이터 정제에 매우 유용
주의사항
이슈 | 설명 |
리스트가 아닌 값이 섞여 있으면? | explode()는 리스트/튜플/Series 타입만 작동 |
여러 컬럼 동시에 explode 시? | 각 열의 리스트 길이가 모두 같아야 함 |
원본 인덱스 보존 vs 재정렬 | ignore_index=True 설정 필요 여부 판단 |
빈 리스트는 NaN 처리됨 | → 후처리 시 dropna() 고려 필요 |
후처리 예제
exploded_df = df.explode('tags').dropna(subset=['tags']).reset_index(drop=True)
→ 리스트 분해 후 빈 값 제거 + 인덱스 초기화까지 한 번에
explode()는 셀 내부의 리스트를 개별 행으로 변환해주는 강력한 도구다.
태그 분석, 다중 선택 옵션 분석, API JSON 데이터 정리 등 현업에서 매우 자주 등장하는 형태를 깔끔하게 펼쳐주는 핵심 함수다.
728x90
반응형
'python > Pandas | Numpy' 카테고리의 다른 글
[Pandas] applymap() - DataFrame 전체 셀에 함수를 적용 (0) | 2025.04.29 |
---|---|
[Pandas] map() (조건 라벨링, 값 변환, 딕셔너리 매핑까지 Series 변환의 핵심) (0) | 2025.04.24 |
[Pandas] eval() (열 간 수식을 짧고 빠르게 처리) (0) | 2025.04.24 |
[Pandas] query() (loc보다 더 깔끔하게 조건 필터링) (0) | 2025.04.24 |
[Pandas] filter() (0) | 2025.04.24 |