Exploding Lists into Rows (explode)
explode() unpacks a column of lists so that every element gets its own row, copying the other column values down to match — turning one wide, nested row into several tidy ones.
Learn Exploding Lists into Rows (explode) in our free Pandas course — a beginner-friendly interactive lesson with worked examples, a practice exercise and a…
Part of the free Pandas course at LearnCodingFast — hands-on lessons with examples you run in your browser, plus practice exercises and a quick quiz.
You'll learn df.explode("col") , how to split strings into lists first, and how to reverse the operation with groupby().agg(list) .
Data often arrives with multiple values crammed into a single cell — an order with several items, a user with several tags. df.explode("col") spreads that list out: each element becomes its own row, and the values in the other columns are duplicated so every new row stays complete.
Very often the "list" is really a delimited string like "math,art" . explode() will not split that for you — it only unpacks real list-like values. The two-step recipe is: turn the string into a list with .str.split(",") , then explode the resulting list column.
Exploding is reversible. To collapse the tidy rows back into one row per original entity, group by the identifying column and aggregate the item column with the built-in list function. This gathers each group's values back into a single list.
A raw string is not a list, so each character is not split out — the row is returned unchanged:
Each post has pipe-separated tags. Find out which tags appear most often.
Lesson complete — nested data is no longer scary!
You can unpack list columns with explode() , split strings into lists first, reset labels with ignore_index=True , and rebuild the nested shape with groupby().agg(list) .
🚀 Up next: Cross-Tabulation — count combinations of two categories with pd.crosstab .
Practice quiz
What does df.explode('items') do?
- Deletes the items column
- Gives every list element its own row
- Joins lists into one string
- Counts the items
Answer: Gives every list element its own row. explode unpacks a list cell so each element becomes its own row.
When a row's list is exploded, what happens to the other columns?
- They are set to NaN
- They are dropped
- They are summed
- Their values are duplicated down to match
Answer: Their values are duplicated down to match. The other column values are copied so every new row stays complete.
If column 'items' holds [['pen','pad'],['mug'],['hat','scarf','gloves']], how many rows does explode produce?
- 3
- 9
- 6
- 1
Answer: 6. 2 + 1 + 3 = 6 rows after exploding.
What index labels result from exploding rows 0, 1, 2 with 2, 1, 3 items?
- 0, 0, 1, 2, 2, 2
- 0, 1, 2, 3, 4, 5
- 0, 1, 2
- All zeros
Answer: 0, 0, 1, 2, 2, 2. explode keeps each original label, so you get 0, 0, 1, 2, 2, 2.
How do you give the exploded result a clean 0..n index?
- reset_index=True
- ignore_index=True
- new_index=True
- fresh=True
Answer: ignore_index=True. Pass ignore_index=True to get a fresh RangeIndex.
What happens if you explode a column of plain comma-separated strings?
- Each character becomes a row
- It raises an error
- It splits on commas automatically
- Nothing useful — the row is returned unchanged
Answer: Nothing useful — the row is returned unchanged. explode only splits list-like values, not raw strings; the row stays as one.
What is the correct two-step recipe to explode 'math,art'?
- .str.split(',') then explode
- explode then .str.split(',')
- astype(list) then sum
- groupby then explode
Answer: .str.split(',') then explode. First .str.split(',') makes a real list, then explode flattens it.
How do you reverse an explode and collapse rows back into lists?
- df.implode()
- df.unstack()
- id
- items
Answer: id. Group by the identifying column and aggregate with list to rebuild the nested shape.
After splitting tags on '|' and exploding ['python|data','data|viz|python','ml'], how many times does 'python' appear in value_counts()?
- 1
- 2
- 3
- 0
Answer: 2. python appears in posts 1 and 2, so its count is 2.
Which form is best for filtering, counting, and joining individual items?
- The nested list form
- The exploded long form
- A pivot table
- A JSON string
Answer: The exploded long form. The exploded (long) form gives one item per row, ideal for filtering and counting.