Коротко
explode("col")делает из строки со списком[a, b, c]три строки; остальные столбцы копируются.- Индекс повторяется;
ignore_index=True— новый индекс 0, 1, 2… - Строки вида
"a, b"сначала превращают в списки:.str.split(", "). - Пустой список превращается в
NaN. - Можно разложить несколько столбцов сразу, если списки в них одной длины.
Синтаксис
df.explode(column, ignore_index=False)
df.assign(col=df["col"].str.split(", ")).explode("col")Параметры
ПараметрЧто делаетПо умолчанию
columnстолбец или список столбцов со спискамиобязательныйignore_indexновый индекс 0, 1, 2…FalseПримеры
orders = pd.DataFrame({
"order": [101, 102, 103],
"items": ["латте, круассан", "чай", "раф, чизкейк, вода"],
})orders.assign(items=orders["items"].str.split(", ")).explode("items")Вывод
order items 0 101 латте 0 101 круассан 1 102 чай 2 103 раф 2 103 чизкейк 2 103 вода
orders.assign(items=orders["items"].str.split(", ")).explode("items", ignore_index=True)Вывод
order items 0 101 латте 1 101 круассан 2 102 чай 3 103 раф 4 103 чизкейк 5 103 вода
orders.assign(items=orders["items"].str.split(", ")).explode("items")["items"].value_counts()Вывод
items латте 1 круассан 1 чай 1 раф 1 чизкейк 1 вода 1 Name: count, dtype: int64
tags = pd.DataFrame({"post": [1, 2], "tags": [["python", "pandas"], []]})
tags.explode("tags") # пустой список → NaNВывод
post tags 0 1 python 0 1 pandas 1 2 NaN
pairs = pd.DataFrame({"id": [1], "a": [[1, 2]], "b": [["x", "y"]]})
pairs.explode(["a", "b"]) # несколько столбцов параллельноВывод
id a b 0 1 1 x 0 1 2 y
Подводные камни
explode не разбивает строки
explode раскладывает только списки (и другие последовательности, кроме строк). Строку сначала разбейте через .str.split.
orders.explode("items") # строка — не список: explode ничего не делаетВывод
order items 0 101 латте, круассан 1 102 чай 2 103 раф, чизкейк, вода