20 примеров для освоения слияния датафреймов данных в Python Pandas |
||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2023-06-03 16:54 Слияние позволяет объединить данные из разных источников в единую структуру. Это необходимая операция при работе с табличными данными, поскольку невозможно или нецелесообразно хранить все данные в одной таблице данных или DataFrame. Понимание того, как эффективно объединять DataFrames в Pandas, является важнейшим навыком для любого специалиста по анализу данных или аналитика. Слияние означает объединение DataFrames на основе значений в общем столбце или столбцах. В этой статье мы рассмотрим полный набор из 20 примеров, которые раскроют нюансы операций слияния. Мы начнем с базовых функций слияния и постепенно перейдем к более сложным сценариям, охватывая все детали слияния DataFrames с помощью Pandas. Мы рассмотрим следующие функции:
Давайте начнем с создания двух DataFrames, которые будут использоваться в примерах. Пример 1 Основной синтаксис функции слияния выглядит следующим образом. Параметр on указывает столбец или столбцы, которые будут использоваться при сравнении строк. Пример 2 – как параметр Существуют различные типы слияния. Параметр how определяет один из следующих типов:
По умолчанию параметр how имеет значение inner, поэтому в предыдущем примере объединенный DataFrame содержит пересечение ключей. Ключи – это значения в столбце(ах), указанном(ых) параметром on. Давайте выполним слияние слева. Объединенный DataFrame включает все ключи из левого DataFrame. Несовпадающие строки заполняются NaN, стандартным представлением отсутствующего значения. Пример 3 – правое слияние Это противоположность левому слиянию, но я бы не рекомендовал использовать правое слияние, поскольку его можно достичь, изменив порядок DataFrames и используя левое слияние. Пример 4- внешнее слияние Объединенный фрейм данных включает все ключи из обоих фреймов данных. Пример 5- параметр индикатора Параметр indicator создает столбец в объединенном DataFrame, который указывает, откуда берется ключевое значение в строках.
Пример 6 – параметр индикатора Параметр indicator также принимает в качестве аргумента строковое значение, которое используется в качестве имени колонки. Пример 7 – параметры left_on и right_on Если столбцы, используемые для объединения DataFrames, имеют разные имена, мы можем использовать параметры left_on и right_on. Пример 8 – слияние по нескольким столбцам Для этого примера мы создадим два новых DataFrames. Чтобы объединить DataFrames по нескольким столбцам, мы записываем имена столбцов в виде списка Python. Пример 9 – параметр суффикса В предыдущем примере объединенный DataFrame имеет столбцы discount_x и discount_y . Суффиксы x и y добавляются для разделения столбцов, которые существуют в обоих DataFrame с одинаковым именем. Суффикс x используется для левого DataFrame, а y – для правого. Мы можем использовать собственные суффиксы, чтобы сделать вывод более понятным. Пример 10 – несколько столбцов Как и параметр on, параметры right_on и left_on принимают в качестве аргумента список в случае, если имена столбцов отличаются. Пример 11 – слияние по индексу Мы также можем объединять DataFrames по значениям их индексов. Для этого примера мы создадим два новых DataFrames. Как мы видим на скриншоте выше, DataFrames имеют разные значения индекса. Один начинается с 0, а другой – с 2. Для объединения по индексу мы используем параметры left_index и right_index. Поскольку мы использовали внутреннее слияние, объединенный DataFrame включает только те индексы, которые существуют в обоих DataFrame. Пример 12 – как параметр с объединением по индексу Мы можем использовать параметр how и при объединении по индексам. Пример 13 – объединение данных временных рядов Данные временных рядов могут включать измерения, сделанные в очень короткие периоды времени (например, на уровне секунд). Поэтому, когда мы объединяем два DataFrames, состоящих из данных временного ряда, мы можем столкнуться с измерениями, отличающимися на секунду или две. Для таких случаев Pandas предоставляет “умный” способ слияния с помощью функции merge_asof. Предположим, что мы объединяем DataFrame A и B. Если строка в левом DataFrame не имеет соответствующей строки в правом DataFrame, merge_asof позволяет взять строку, значение которой близко к значению в левом DataFrame. Это похоже на слияние слева, за исключением того, что мы сравниваем по ближайшему ключу, а не по одинаковым ключам. Оба DataFrames должны быть отсортированы по ключу. Для каждой строки в левом DataFrame:
Давайте создадим два новых DataFrames, содержащих данные временных рядов. Некоторые значения в столбце времени совпадают, в то время как другие отличаются на несколько секунд. Давайте посмотрим, что произойдет, если мы объединим их. Правый DataFrame (df2) не имеет значения 00:00:02, поэтому в объединенном DataFrame значение 00:00:00 используется в качестве правого значения. Пример 14 – параметр направления В предыдущем примере функция merge_asof искала предыдущее значение для несовпадающих строк, поскольку значение параметра направления по умолчанию – “назад”. Давайте изменим его на “ближайшее” и посмотрим, что произойдет. Правое значение в первой строке равно 0,36, потому что следующее значение (00:00:03) ближе к значению в левом DataFrame (00:00:02), чем предыдущее (00:00:00). Пример 15 – параметр допуска Можно также задать допуск, который будет использоваться при проверке предыдущего и следующего значений. В следующем примере направление – вперед, поэтому следующее значение проверяется на несовпадение строк. Мы также установили допуск в 1 секунду, поэтому для использования следующего значения оно должно отличаться не более чем на 1 секунду. Посмотрите на третью и шестую строки в объединенном DataFrame. Правое значение равно NaN, потому что следующее значение в правом DataFrame для этих строк отличается на 2 секунды.
Пример 16 – параметр allow_exact_matches У нас также есть возможность не разрешать точные совпадения в объединенном DataFrame. По умолчанию точные совпадения присутствуют в объединенном DataFrame, но это можно изменить с помощью параметра allow_exact_matches. Значения времени в первых строках одинаковы, но объединенный DataFrame имеет значение NaN в первой строке правой колонки значений, потому что мы установили значение параметра allow_exact_matches как False. Пример 17 – по параметру Параметр by можно использовать для разделения групп при объединении точек данных с предыдущим или следующим значением. Давайте добавим столбец группы в наши DataFrames. Допустим, мы хотим использовать merge_asof, но только внутри групп, чтобы значения в определенной группе не могли быть объединены с любыми значениями в другой группе. Для этого мы можем использовать параметр by. Правое значение в первой строке для группы BB – NaN . Мы объединяем на основе “обратного” направления, и предыдущее значение принадлежит другой группе. Пример 18 – упорядоченное слияние Функция merge_ordered выполняет слияние для упорядоченных данных с необязательным заполнением/интерполяцией. Она предназначена для упорядоченных данных, таких как временные ряды. Ее легче понять на примере: Строки упорядочены по столбцу времени. Если один из DataFrames не имеет определенного значения времени, столбцы, исходящие из него, заполняются значением NaN . Пример 19 – параметр fill_method При выполнении упорядоченного слияния с помощью merge_ordered , мы можем использовать параметр fill_method для определения метода интерполяции. Значение по умолчанию – NaN, и единственная опция, которую мы можем использовать, это “ffill”, что означает прямое заполнение. Сравните результат с предыдущим примером, и вы заметите, как значения NaN заменяются предыдущим значением. Пример 20- параметр left_by Мы также можем выполнить упорядоченное слияние в каждой группе отдельно. Параметр left_by группирует левый DataFrame по столбцам группы и объединяет по частям с правым DataFrame. В отличие от предыдущего примера, правое значение в первой строке группы “BB” – NaN, потому что мы не можем использовать значения из другой группы. Заключительные слова В этих 20 примерах мы рассмотрели различные сценарии слияния, от самых простых до более сложных. Благодаря этим практическим примерам вы будете готовы к решению любой задачи по объединению, которая встанет перед вами. Источник: uproger.com Комментарии: |
|