Разделяем значения в строке DataFrame: метод split в Pandas
Быстрый ответ
Для того чтобы быстро разделить колонку со значениями CSV на несколько строк в Pandas, используйте метод pd.Series.explode()
. Исходя из DataFrame df
с колонкой 'Values'
, разделите строки на списки с помощью метода .str.split(',')
и затем примените .explode()
:
df['Values'] = df['Values'].str.split(',')
df = df.explode('Values')
# В результате ваш DataFrame получит больше строк — как у фермера кукурузы!
Таким образом, из данных:
Values
0 a,b,c
1 d,e,f
Мы получаем отдельные строки:
Values
0 a
0 b
0 c
1 d
1 e
1 f
Для применения этого метода требуется версия Pandas 0.25.0 или более новая, для разделения множества столбцов — Pandas 1.3.0. Если ваша версия Pandas старая, придется немного повоевать с кодом.
Более глубокое погружение: продвинутые приемы и предостережения
От единичного к множеству: разделение по нескольким столбцам
Начиная с версии 1.3.0, Pandas предоставляет возможность разбивать данные по нескольким столбцам одновременно:
df = df.explode(['Column1', 'Column2'])
# Так Pandas переходит от разделения по одному столбцу к множественному.
Работаем осторожно с нестроковыми столбцами
Наитрепетнее обращайтесь с нестроковыми данными. Не допускайте непродуманных преобразований при разделении:
df['NonStringCol'] = df['NonStringCol'].astype(original_dtype)
# Иногда нужно сохранить верность pandas.
Поиск скорости: эффективность превыше всего
При работе с большими объемами данных начните оценивать производительность, используя %timeit
, и выявляйте наиболее эффективные методы:
%timeit myDataFrame.explode('Values')
# Ледники движутся быстрее, чем некоторые функции!
Использование stack
и concat
для перестроения структуры
Для модификации структуры датафрейма можно использовать упаковку и склеивание — альтернативные подходы преобразования данных:
split_df = (df.set_index(['Fixed1', 'Fixed2'])
.apply(lambda x: x.str.split(',').explode())
.reset_index())
# Вуаля! Данные преобразованы в нужную форму.
iterrows
не лучший друг для больших объемов
iterrows
может показаться привлекательным решением, но велика вероятность попасть в ловушку. В Pandas рекомендуют избегать этого метода при обработке крупных массивов данных. В случае трудного выбора отдавайте предпочтение векторизации.
Визуализация
Продемонстрируем на примере коробки, в которой записано: 'яблоки, апельсины, бананы, виноград, персики'
.
Применяем df.explode('column')
…
И получаем каждый фрукт в отдельном ящике, превратившийся в строку:
📦🍎 📦🍊 📦🍌 📦🍇 📦🍑
Обращение с данными как профессионал
Идеальная чистота данных после применения explode
В идеальном DataFrame каждый столбец — переменная, каждая строка — наблюдение. Обеспечьте сохранение порядка после применения explode
:
df.rename(columns={new_col_name: 'Original_Col_Name'}).sort_index(axis=1)
# Поддержание порядка и чистоты — залог успешного анализа.
Поиск новых инструментов: использование tidy_split
Функции сторонних библиотек, как например tidy_split
, помогут вам сохранить порядок столбцов и эффективно обрабатывать пропущенные значения.
Выбор подходящего инструмента
Проведите исследование и выберите инструмент, наиболее подходящий для решения вашей задачи с учетом структуры и размера данных, а также версии Pandas.
Полезные материалы
- pandas.DataFrame.explode — документация pandas 2.2.0 — Официальная документация метода
explode
. - Как "развернуть" колонку в pandas DataFrame в множество строк – Stack Overflow — Разнообразные подходы от сообщества разработчиков.
- Использование pandas и Python для анализа вашего набора данных – Real Python — Практический гид.
- Изучение датасетов с использованием pandas — Углубленное знакомство с анализом данных.
- Руководство Криса Элбона — символирует концепции раскладки, применения и объединения в контексте обработки данных.
- Medium: Преобразование списка в DataFrame — Детальный обзор метода.