Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер
Всем привет, меня зовут Питер~
В реальных бизнес-требованиях наши данные могут находиться в разных библиотечных таблицах. Во многих случаях нам необходимо выполнять запросы на объединение нескольких таблиц для извлечения данных, что достигается с помощью соединений SQL, таких как левое соединение, левое соединение, внутреннее соединение и т. д.
Также есть функции, реализующие функцию слияния в пандах, такие как: concat, append, join, merge. В центре внимания этой статьифункция слияния, также является одной из самых важных функций в pandas для реализации слияния данных.
Откажетесь ли вы от SQL после прочтения?
Серийные статьи Pandas
На данный момент серия статей Pandas пополнилась 13 статьями.Статьи все в стиле кейс+иллюстрация.Добро пожаловать в гости и прочтите. Есть много лично рекомендованных статей:
параметр
Адрес официального сайта обучения:pandas.друзья попали на него.org/pandas-docs…
pd.merge(left, # 待合并的2个数据框
right,
how='inner', # ‘left’, ‘right’, ‘outer’, ‘inner’, ‘cross’
on=None, # 连接的键,默认是相同的键
left_on=None, # 指定不同的连接字段:键不同,但是键的取值有相同的内容
right_on=None,
left_index=False, # 根据索引来连接
right_index=False,
sort=False, # 是否排序
suffixes=('_x', '_y'), # 改变后缀
copy=True,
indicator=False, # 显示字段来源
validate=None)
Конкретное объяснение параметров:
-
слева, справа: фреймы данных для слияния
-
как: есть 5 способов слияния: {'левый', 'правый', 'внешний', 'внутренний', 'крест'}, по умолчанию "внутренний"
1. слева: левое соединение, сохранить все данные слева, справа аналогично, аналогично левому соединению или правому соединению SQL
2. external: функция полного соединения, аналогичная полному внешнему соединению SQL.
3. внутреннее: перекрестное соединение, аналогичное внутреннему соединению SQL.
4, крест: создать два фрейма данных DataFrameДекартово произведение, по умолчанию сохраняется левый порядок
-
on: свойство столбца соединения; по умолчанию это одно и то же поле обоих DataFrames
-
left_on/right_on: укажите два разных ключа для соединения
-
left_index, right_index: объединить по индексу
-
суффиксы: укажите суффикс, который мы хотим
-
индикатор: отображает источник поля
Данные моделирования
Мы создали 4 фрейма данных DataFrame; df1, df2, df3 имеют одинаковый идентификатор пользователя ключа; df4 имеет аналогичный ключ userid1, значение также равно ac, а значение идентификатора пользователя df1 или df2 имеет одинаковую часть.
import pandas as pd
import numpy as np
Параметры слева, справа
слева и как два фрейма данных, которые необходимо соединить.Как правило, существует два способа записи:
- pd.merge(слева,справа), личные привычки
- left.merge(right)
Схематично процесс выглядит следующим образом:
- Два кадра данных df1 (слева), df2 (справа) имеют одинаковый идентификатор пользователя поля
- По умолчанию выполняется связь через одно и то же поле (ключ), извлекается одно и то же значение (ac) в ключе и отображаются все записи каждого ключа, например, имеет несколько записей.
параметр как
inner
внутренний называет этовнутреннее соединение. Он будет напрямую связываться в соответствии с тем же идентификатором пользователя атрибута столбца и извлекать ту же информацию о данных a, c под атрибутом.
⚠️В приведенном выше иллюстративном процессе по умолчанию используется как = "inner"
outer
Внешнее соединение называется внешним соединением.В процессе объединения для объединения берется объединение ключей в двух фреймах данных.
- Внешнее соединение, выньте объединение всех ключей пересечения. В примере объединение пользователей
- NaN, если для ключа во фрейме данных нет данных
Схематично процесс выглядит следующим образом:
- Так же подключается по тому же полю: userid
- Сохраняйте все данные с обеих сторон, чтобы все существовало
- Если значение ниже ключа не существует на ребре, результат дополняется NaN. Например, если b существует в идентификаторе пользователя df1, но не существует в df3, то счет, соответствующий b, равен NaN, а cd аналогичен; e имеет значение e в df3, но не существует в df1, тогда значение возраста равно NaN
left
На основе ключа в кадре данных слева; если левый существует, а правый нет, правый представлен как NaN
Схематично процесс выглядит следующим образом:
- Отличие от результата приведенного выше диаграммного процесса состоит в том, что e не появляется;
- Когда how="left", будут сохранены только все значения ниже userid в df1 (left), за исключением e
right
На основе значения ключа во фрейме данных справа; если правая часть существует, но левая не существует, левая сторона представлена как NaN
Схематично процесс выглядит следующим образом:
- Когда how="right", будут сохранены только все значения userid в df3(right)
- Результат сохраняет только все значения ниже идентификатора пользователя df3: a, e
cross
Декартово произведение: перекрестное сопоставление данных в двух фреймах данных, появляющеесяn1*n2
количество данных
Схематическая процедура для декартова произведения выглядит следующим образом:
- Количество отображаемых данных составляет 4 * 2, а данные под идентификатором пользователя сопоставляются.
- В конечном результате тот же идентификатор пользователя поля будет иметь суффикс по умолчанию, чтобы избежать путаницы.
_x、_y
параметр включен
Если два соединяемых фрейма данных имеют один и тот же ключ, по умолчанию для соединения используется один и тот же ключ.
Параметр on во всех приведенных выше примерах диаграмм по умолчанию использует один и тот же ключ для подключения, поэтому иногда его можно не указывать.
Посмотрите на другой пример:
Вы также можете поменять местами левое и правое:
Приведенные выше два примера относятся к фрейму данных, имеющему только один и тот же ключ, если нужно объединить более одного ключа, как с этим справиться? Чтобы объяснить на примере с официального сайта, мы сначала создадим два DataFrames: df5, df6
Теперь, чтобы объединить два кадра данных:
Схематично процесс слияния выглядит следующим образом:
- Укажите два связанных поля key1, key2 через параметр on
- Только когда значения key1 и key2 в двух фреймах данных будут точно одинаковыми (пересечение), они будут сохранены; например, появятся key1=K0, key2=K0 и key1=K1, key2=K0.
Рассмотрим случай подключения через how="outer":
Взгляните на схему процесса:
- Указываем два ключа key1, key2 соединения
- С помощью how="outer" все данные в обоих фреймах данных сохраняются. Если значение ключа не существует во фрейме данных, возьмите NaN
Параметры left_on, right_on
При соединении и слиянии выше оба фрейма данных имеют одинаковые поля ранее, такие как идентификатор пользователя или ключ1 и ключ2. Но как же не быть одинаковых ключей в двух фреймах данных, но значения в этих ключах имеют одинаковые части, такие как наши df1, df3:
На данный момент мы используем параметры left_on и right_on для указания ключей соединения с обеих сторон:
Если мы не укажем, система сообщит об ошибке, потому что два фрейма данных не имеют одного и того же ключа и не могут быть связаны сами по себе:
суффиксы параметров
Если одни и те же поля появляются в результате после конкатенации, суффикс по умолчанию_x_、_y
. Этот параметр предназначен для изменения нашего суффикса по умолчанию. Мы рассматриваем формирование декартова произведения;
Теперь мы можем указать нужный суффикс:
indicator
Функция этого параметра состоит в том, чтобы указать, из какого кадра данных сгенерирована запись: обе, левая_только, правая_только.
Новое поле будет отображаться, если параметр включен_merge
:
Без параметров источник не будет отображаться по умолчанию, см. ситуацию по умолчанию:
Суммировать
Функция слияния действительно очень мощная, и она часто используется в работе, что позволяет полностью реализовать эффект объединения в SQL. Надеюсь, диаграммы в этой статье помогут читателям понять, как использовать эту функцию слияния. В то же время в pandas есть несколько других функций, связанных со слиянием, таких как join, concat, append, о которых будет рассказано в следующей статье.