Разбиение колонки списка в Pandas на несколько колонок
Быстрый ответ
Если требуется разделить столбец, состоящий из списков, на несколько отдельных столбцов, воспользуйтесь следующим кодом:
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
каждый элемент списка будет распределён по своему столбцу, сохраняя связь с исходными строками.
Использование альтернативных методов
В этом разделе мы рассмотрим разные подходы к работе с данными для упрощения и увеличения скорости обработки.
Большая производительность с pd.concat()
Вы можете объединить исходный DataFrame
с новыми столбцами:
# Их успешно объединяет общее будущее.
df_expanded = pd.concat([df, pd.DataFrame(df['list_column'].tolist())], axis=1).drop('list_column', axis=1)
Не забывайте про индексирование
Нельзя забывать об индексировании:
# "Потерянный индекс? Не на моей вахте!"
df_expanded.set_index(df.index)
zip(*list)
для быстрой обработки
Применение быстрого преобразования:
# Давайте увеличим скорость обработки данных!
df_expanded = pd.concat([df, pd.DataFrame(list(zip(*df['list_column'])))], axis=1)
Используйте str.split()
для разделения строк
Вы можете разделить строки на составляющие:
# Освободите строки от их уз!
df['string_column'].str.split(',', expand=True)
Понятные имена столбцов — залог успеха
Присваивайте осмысленные имена новым столбцам:
# "Столбец без имени – это как роза без аромата."
df_expanded.columns = ['Col1', 'Col2', ... ]
Визуализация
Картинка может сказать больше тысячи слов.
Представим строку матрёшек (🎎), в каждой из которых находятся списки:
До: | 🎎(1, 2, 3) | 🎎(4, 5, 6) | 🎎(7, 8, 9) |
Использование .apply(pd.Series)
позволяет извлечь элементы:
df['column_of_lists'].apply(pd.Series)
В результате каждому элементу выделен отдельный столбец:
После: | 1 | 2 | 3 | | 4 | 5 | 6 | | 7 | 8 | 9 |
Правило обработки больших данных: «Будь эффективен или проиграешь»
Привет, %timeit
, мой верный помощник
Давайте включим секундомер и оценим производительность!
# Готовы? Поехали!
%timeit pd.DataFrame(df['list_column'].tolist(), index=df.index)
Состязание по скорости
Сравним zip
и apply
. Победителем станет самый быстрый!
Решение проблем с разной длинной списков, отсутствием данных и типизацией столбцов:
# Найдем общий язык для списков разной длины
df_expanded = pd.DataFrame(df['list_column'].tolist()).reindex_like(df)
# Переписываем историю типов данных!
df_expanded['Col1'] = df_expanded['Col1'].astype(int)
Свобода выбора! Используйте apply()
Возможен обходной путь через .tolist()
:
Внесите логику в обработку данных
Вы можете разделить элементы, исходя из их положения в списке или выполнения некоторых условий:
df.apply(lambda row: [row['list_column'][0]] if condition else [None, row['list_column'][1]], axis=1)
Ваши правила в вашем DataFrame
Создавайте собственные функции для разворачивания списков, учитывая структуру и целостность DataFrame.
Полезные материалы
- Разделение столбца списков в Pandas на несколько столбцов – Stack Overflow — Обсуждение на Stack Overflow, как работать со списками в Pandas.
- pandas.DataFrame.apply — документация pandas 2.2.0 — Официальное руководство по применению метода
.apply()
в Pandas. - Работа с текстовыми данными — документация pandas 2.2.0 — Примеры и руководство по работе с текстовыми данными в Pandas.
- pandas.DataFrame.explode — документация pandas 2.2.0 — Работа с "взрывающимися" списками в столбцах с помощью метода
.explode()
. - Манипуляции с данными с помощью Pandas | Руководство по науке о данных на Python — Глубокий анализ работы с данными в Pandas.
- Использование Pandas для улучшения обработки данных – Medium — Советы по эффективной обработке данных в Pandas от авторов Medium.