[Pandas] explode
Pandas explode, DataFrame.explode, list 컬럼 펼치기
정의
explode(column) 는 list / set / tuple 등의 시퀀스 값을 가진 컬럼을 각 원소가 별도 행 이 되도록 펼친다.
JSON / 로그 / 다중 태그 데이터 처리의 핵심.
기본
python
import pandas as pd
df = pd.DataFrame({
'user': ['Alice', 'Bob', 'Charlie'],
'tags': [['py', 'pandas'], ['py'], ['go', 'rust', 'ts']],
})
print(df.explode('tags')) 결과
user tags
0 Alice py
0 Alice pandas
1 Bob py
2 Charlie go
2 Charlie rust
2 Charlie ts| user | tags |
|---|---|
| Alice | py |
| Alice | pandas |
| Bob | py |
| Charlie | go |
| Charlie | rust |
| Charlie | ts |
같은 index 가 반복됨. reset_index(drop=True) 로 깨끗하게.
여러 컬럼 동시 explode (pandas 1.3+)
df.explode(['tags', 'scores'])
# 두 컬럼이 같은 길이여야 함
빈 list / NaN 처리
df = pd.DataFrame({'x': [[1, 2], [], None]})
df.explode('x')
# x
# 0 1
# 0 2
# 1 NaN ← 빈 list 는 NaN 한 행
# 2 NaN ← None 도 NaN
str.split + explode
문자열을 list 로 분리 후 explode 가 흔한 idiom.
df = pd.DataFrame({'tags_str': ['py,pandas', 'py', 'go,rust,ts']})
df['tags'] = df['tags_str'].str.split(',')
df.explode('tags')
groupby 의 역연산
# group → list
df.groupby('user').agg({'tag': list})
# list → row (explode)
df_grouped.explode('tag')
자주 쓰는 패턴
1. JSON 의 배열 펼치기
import pandas as pd
data = [
{'order': 1, 'items': ['apple', 'banana']},
{'order': 2, 'items': ['cherry']},
]
df = pd.DataFrame(data)
df.explode('items')
2. tags 분석
df = pd.DataFrame({
'post_id': [1, 2, 3],
'tags': ['python,pandas,data', 'python', 'go,rust'],
})
exploded = df.assign(tag=df['tags'].str.split(',')).explode('tag')
exploded['tag'].value_counts()
# 가장 인기있는 태그
3. range 펼치기
df = pd.DataFrame({
'start': [1, 5, 10],
'end': [3, 6, 12],
})
df['range'] = df.apply(lambda r: list(range(r['start'], r['end']+1)), axis=1)
df.explode('range')
함정
1. index 중복
df.explode('tags') # index 가 0, 0, 1, 2, 2, 2
df.explode('tags').reset_index(drop=True) # 0, 1, 2, ...
2. dtype 강등
df = pd.DataFrame({'nums': [[1, 2], [3]]})
df.explode('nums').dtypes
# nums: object 가 될 가능성
df['nums'] = pd.to_numeric(df['nums']) # 다시 int
3. 컬럼이 list 가 아니면 unchange
df = pd.DataFrame({'x': [1, 2, 3]})
df.explode('x') # 그대로
참고
이 글의 용어 (3개)
- [Pandas] groupbypandas
- 정의 는 데이터를 그룹으로 나누고 (split), 각 그룹에 함수를 적용 (apply), 결과를 합쳐 (combine) 새 DataFrame 으로 만드는 split-apply-c…
- [Pandas] meltpandas
- 정의 는 의 역방향. wide-format → long-format 변환. 여러 컬럼을 두 컬럼 ( , ) 으로 합친다. 장기간 시계열 데이터나 시각화 (ggplot, seabo…
- [Pandas] str regex (extract / split / replace)pandas
- 정의 의 정규식 기반 메서드. 패턴 추출, 분리, 치환 의 핵심. str.extract 캡처 그룹으로 부분 문자열을 새 컬럼으로. <CodeWithOutput language="…
💬 댓글