Нашли ошибку?
среднийpandas 3.0.6

explode

Разложить списки в ячейках на отдельные строки — теги, позиции заказа, несколько значений через запятую.

Нужно знать:Строки: .str и тип str

Содержание статьи

Коротко

  • 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.

explode без split
orders.explode("items")                  # строка — не список: explode ничего не делает
Вывод
   order               items
0    101     латте, круассан
1    102                 чай
2    103  раф, чизкейк, вода