ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Разбиение колонки списка в Pandas на несколько колонок

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если требуется разделить столбец, состоящий из списков, на несколько отдельных столбцов, воспользуйтесь следующим кодом:

Python
Скопировать код
import pandas as pd

# Создание DataFrame 'df' со столбцом 'list_column'
df = pd.DataFrame({'list_column': [[1, 2], [3, 4], [5, 6]]})

# Разделение 'list_column' на отдельные столбцы
df_expanded = pd.DataFrame(df['list_column'].tolist(), index=df.index)

В результате в df_expanded каждый элемент списка будет распределён по своему столбцу, сохраняя связь с исходными строками.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Использование альтернативных методов

В этом разделе мы рассмотрим разные подходы к работе с данными для упрощения и увеличения скорости обработки.

Большая производительность с pd.concat()

Вы можете объединить исходный DataFrame с новыми столбцами:

Python
Скопировать код
# Их успешно объединяет общее будущее.
df_expanded = pd.concat([df, pd.DataFrame(df['list_column'].tolist())], axis=1).drop('list_column', axis=1)

Не забывайте про индексирование

Нельзя забывать об индексировании:

Python
Скопировать код
# "Потерянный индекс? Не на моей вахте!"
df_expanded.set_index(df.index)

zip(*list) для быстрой обработки

Применение быстрого преобразования:

Python
Скопировать код
# Давайте увеличим скорость обработки данных!
df_expanded = pd.concat([df, pd.DataFrame(list(zip(*df['list_column'])))], axis=1)

Используйте str.split() для разделения строк

Вы можете разделить строки на составляющие:

Python
Скопировать код
# Освободите строки от их уз!
df['string_column'].str.split(',', expand=True)

Понятные имена столбцов — залог успеха

Присваивайте осмысленные имена новым столбцам:

Python
Скопировать код
# "Столбец без имени – это как роза без аромата."
df_expanded.columns = ['Col1', 'Col2', ... ]

Визуализация

Картинка может сказать больше тысячи слов.

Представим строку матрёшек (🎎), в каждой из которых находятся списки:

До: | 🎎(1, 2, 3) | 🎎(4, 5, 6) | 🎎(7, 8, 9) |

Использование .apply(pd.Series) позволяет извлечь элементы:

Python
Скопировать код
df['column_of_lists'].apply(pd.Series)

В результате каждому элементу выделен отдельный столбец:

После: | 1 | 2 | 3 | | 4 | 5 | 6 | | 7 | 8 | 9 |

Правило обработки больших данных: «Будь эффективен или проиграешь»

Привет, %timeit, мой верный помощник

Давайте включим секундомер и оценим производительность!

Python
Скопировать код
# Готовы? Поехали!
%timeit pd.DataFrame(df['list_column'].tolist(), index=df.index)

Состязание по скорости

Сравним zip и apply. Победителем станет самый быстрый!

Решение проблем с разной длинной списков, отсутствием данных и типизацией столбцов:

Python
Скопировать код
# Найдем общий язык для списков разной длины
df_expanded = pd.DataFrame(df['list_column'].tolist()).reindex_like(df)

# Переписываем историю типов данных!
df_expanded['Col1'] = df_expanded['Col1'].astype(int)

Свобода выбора! Используйте apply()

Возможен обходной путь через .tolist():

Внесите логику в обработку данных

Вы можете разделить элементы, исходя из их положения в списке или выполнения некоторых условий:

Python
Скопировать код
df.apply(lambda row: [row['list_column'][0]] if condition else [None, row['list_column'][1]], axis=1)

Ваши правила в вашем DataFrame

Создавайте собственные функции для разворачивания списков, учитывая структуру и целостность DataFrame.

Полезные материалы

  1. Разделение столбца списков в Pandas на несколько столбцов – Stack Overflow — Обсуждение на Stack Overflow, как работать со списками в Pandas.
  2. pandas.DataFrame.apply — документация pandas 2.2.0 — Официальное руководство по применению метода .apply() в Pandas.
  3. Работа с текстовыми данными — документация pandas 2.2.0 — Примеры и руководство по работе с текстовыми данными в Pandas.
  4. pandas.DataFrame.explode — документация pandas 2.2.0 — Работа с "взрывающимися" списками в столбцах с помощью метода .explode().
  5. Манипуляции с данными с помощью Pandas | Руководство по науке о данных на Python — Глубокий анализ работы с данными в Pandas.
  6. Использование Pandas для улучшения обработки данных – Medium — Советы по эффективной обработке данных в Pandas от авторов Medium.