Challenge SQL: графическая функция слияния данных pandas

pandas
Challenge SQL: графическая функция слияния данных pandas

Общественный номер: 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

image-20210724095138183

Схематично процесс выглядит следующим образом:

  • Когда 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, о которых будет рассказано в следующей статье.