Объединяем две Series в DataFrame в pandas: сохраняем индексы
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Если перед вами стоит задача объединить два Series-объекта pandas в DataFrame, существуют два способа это сделать: добавить их в словарь, указав имена столбцов, или использовать функцию pd.concat
для горизонтального объединения (axis=1). Ниже приведены примеры кода для обеих методик:
import pandas as pd
# Предположим, что у нас есть два объекта Series: series1 и series2
# Способ 1: создание DataFrame с помощью словаря
df = pd.DataFrame({'column1': series1, 'column2': series2})
# Способ 2: создание DataFrame с помощью pd.concat
df = pd.concat([series1, series2], axis=1, keys=['column1', 'column2'])
В результате мы получаем DataFrame, в котором 'series1' превращается в 'column1', а 'series2' — в 'column2'.
О работе с индексами и именами столбцов
При объединении Series-объектов в DataFrame, непереоценено сохранить исходные индексы, чтобы не терять данные. Здесь на помощь придёт функция pd.concat
, позволяющая обрабатывать и несовпадающие индексы без потери информации. В этом контексте особую важность принимает параметр axis
: при значении 0 объединение происходит по индексам (то есть по строкам), а при значении 1 — по столбцам.
Если вас беспокоит потеря имен столбцов, не стоит волноваться: атрибуты name
объектов Series автоматически становятся названиями столбцов в новом DataFrame. Если же имен нет, можно использовать параметр keys
в функции pd.concat
для их установки.
# Устанавливаем имена Series, благодаря чему они станут названиями столбцов в DataFrame
series1.name, series2.name = 'column1', 'column2'
df = pd.concat([series1, series2], axis=1)
Вы также можете объединить больше двух Series с использованием pd.concat
. Но следует помнить о том, что разнородные индексы могут вызвать появление в DataFrame значений NaN.
Сохранение и восстановление индексов
Для того чтобы исходные индексы стали дополнительным столбцом DataFrame, используйте метод reset_index
после объединения с помощью pd.concat
.
# Возвращаем исходные индексы в виде отдельного столбца
df = pd.concat([series1, series2], axis=1).reset_index()
Подход для ранних версий pandas
Если вы используете версию pandas ниже 0.23, можно применить такую стратегию: преобразуйте Series в DataFrame функцией to_frame()
и затем соедините их при помощи метода join
.
# Преобразуем Series в DataFrame и соединяем их
df1, df2 = series1.to_frame('column1'), series2.to_frame('column2')
df = df1.join(df2) # по умолчанию используется outer join
Удостоверьтесь, что индексы ваших Series совпадают, иначе при выполнении операции join
может появиться ряд избыточных строк.
Создание DataFrame без лишних манипуляций
Если вам нежелательно производить конкатенацию, вы можете создать DataFrame прямо из словаря, содержащего Series-объекты.
# Создаём DataFrame непосредственно из объектов Series
df = pd.DataFrame({'column1': series1, 'column2': series2})
Такой подход позволяет избежать несоответствия данных, поскольку pandas правильно обрабатывает индексы Series.
Контроль за дубликатами при несовпадении индексов
Будьте внимательны при объединении Series с разными наборами индексов: это может привести к дублированию данных. В такой ситуации вам пригодится метод drop_duplicates
для удаления повторяющихся записей.
Визуализация
Для наглядности можно представить две реки, впадающие в одно большое озеро:
Река 1 (🏞️): [Рыба 🐟, Водоросли 🌿, Вода 💧]
Река 2 (🏞️): [Лягушка 🐸, Лотос 🌸, Вода 💧]
Мы соединяем их в Озеро DataFrame (🏞️🔄🏞️):
Озеро DataFrame = pd.DataFrame({'Река 1': Река 1, 'Река 2': Река 2})
В результате мы имеем идиллическую картину Экосистемы Озера:
🏞️🔄🏞️:
| Река 1 | Река 2 |
| ------- | ------- |
| 🐟 | 🐸 |
| 🌿 | 🌸 |
| 💧 | 💧 |
Подтверждение корректности результата
Всегда точно знайте, как представляют себя первые пять строк нового DataFrame. Это достигается путем использования метода df.head()
. Это поможет убедиться в корректности процедуры объединения данных и отсутствии ошибок.
Полезные рекомендации
- Если требуется переименовать столбцы, используйте метод
.rename(columns={'old_name': 'new_name'})
, чтобы изменить имена на ходу. - Знайте и понимайте особенности автоматического выравнивания данных pandas при создании DataFrame из словаря Series.
Тонкости и особенные случаи
- Будьте осторожны при работе с индексами различной длины: функция
pd.concat
автоматически дополняет недостающие значения NaN. - Избегайте дублирования данных из-за неуникальных индексов в объединяемых Series.
- Обратите внимание на многоуровневые индексы (MultiIndex), если таковые присутствуют в Series. Функция
pd.concat
сохраняет структуру MultiIndex.
Полезные материалы
- Присоединение, объединение, конкатенация и сравнение — документация pandas 2.2.0 — официальное руководство по объединению данных в pandas.
- DataFrame pandas: Упростите работу с данными – Real Python — подробный гид по использованию DataFrame в pandas.
- pandas.concat — документация pandas 2.2.0 — ссылка на документацию по функции конкатенации данных в pandas.
- Series — документация pandas 2.2.0 — подробная информация о Series-объектах в pandas.
- Python – Объединение двух Series-объектов в DataFrame в pandas – Stack Overflow — обсуждение данной темы на Stack Overflow с примерами.
- DataFrame в pandas на Python – GeeksforGeeks — простое введение в работу с DataFrame в pandas.
- DataFrame pandas – W3Schools — учебник по созданию и манипуляции DataFrame, включая работу с Series.