Пропустить до содержимого

Как эффективно использовать df.merge?

[

Объединение данных в pandas с помощью merge(), join() и concat()

Когда вы работаете с объектами Series и DataFrame в библиотеке pandas, у вас есть мощные инструменты для анализа и исследования данных. Одной из особенностей этих инструментов является возможность объединения отдельных наборов данных. С помощью pandas вы можете объединять, соединять и конкатенировать данные, что позволяет унифицировать и лучше понять данные при их анализе.

В этом руководстве вы узнаете, как объединять данные в pandas с помощью следующих методов:

  • merge() для объединения данных по общим столбцам или индексам
  • .join() для объединения данных по ключевому столбцу или индексу
  • concat() для объединения DataFrame по строкам или столбцам

Если у вас уже есть опыт работы с объектами DataFrame и Series в pandas и вы готовы научиться их объединять, то это руководство поможет вам сделать это. Если вы чувствуете, что немного подзабыли, то вы можете освежить память, просмотрев краткий курс по работе с DataFrames перед продолжением.

Вы можете следовать примерам в этом руководстве, используя интерактивную оболочку Jupyter Notebook и наборы данных, доступные по ссылке ниже:

Примечание: Техники, которые вы узнаете ниже, обычно работают как для объектов DataFrame, так и для Series. Однако, для простоты примеров будет использоваться термин «набор данных», который может означать как DataFrame, так и Series.

pandas merge(): объединение данных по общим столбцам или индексам

Первый метод, о котором вы узнаете, - это merge(). Вы можете использовать merge() всякий раз, когда вам требуется функциональность, подобная операциям объединения базы данных. Этот метод является наиболее гибким среди трех рассматриваемых методов.

Если вам необходимо объединить объекты данных на основе одного или нескольких ключей, аналогично тому, что вы делали бы в реляционной базе данных, то именно merge() поможет вам. Более конкретно, merge() наиболее полезен, когда вы хотите объединить строки данных, которые совпадают.

С помощью merge() вы можете осуществить соединения один-к-одному и многие-к-одному. В случае одного-к-одному соединения один из ваших наборов данных будет иметь много повторяющихся значений в объединяемом столбце. Например, значения могут быть 1, 1, 3, 5 и 5. В то же время столбец объединения в другом наборе данных не будет иметь повторяющихся значений. Возьмите, например, значения 1, 3 и 5.

Как вы могли догадаться, в случае многие-к-многим оба столбца объединения будут иметь повторяющиеся значения. Такие соединения более сложные и приводят к декартову произведению объединенных строк.

Это означает, что после объединения вы получите каждую комбинацию строк, которые имеют одно и то же значение в ключевом столбце.

Как использовать merge()

Для использования метода merge() вам нужно вызвать его на одном из ваших наборов данных и передать в метод второй набор данных, с которым вы хотите объединиться. Также вам нужно указать, по какому столбцу или индексу вы хотите объединять данные. Например:

result = df1.merge(df2, on='key_column')

В приведенном выше примере df1 и df2 - это два набора данных, которые вы хотите объединить, а 'key_column' - это столбец, по которому вы хотите объединить данные. Результат объединения будет сохранен в переменной result.

Вы также можете указать какой вид объединения вы хотите использовать, указав параметр how, который может принимать значения 'inner', 'outer', 'left' или 'right'. Например:

result = df1.merge(df2, on='key_column', how='left')

Здесь 'left' говорит о том, что вы хотите использовать левое объединение, то есть сохранить все строки из левого набора данных и добавить соответствующие строки из правого набора данных (если присутствует).

Примеры

Предположим, у вас есть два набора данных - orders и order_details. orders содержит информацию о заказах, а order_details содержит информацию о деталях заказов. Оба набора данных имеют столбец order_id, который можно использовать для объединения данных. Вот как вы можете объединить эти наборы данных с помощью метода merge():

result = orders.merge(order_details, on='order_id')

В результате получится новый набор данных result, который содержит все строки из orders и order_details, объединенные по столбцу order_id.

pandas .join(): объединение данных по столбцу или индексу

Другой метод, который вы можете использовать для объединения данных в pandas, это .join(). Вы можете использовать .join() для объединения данных на основе ключевого столбца или индекса.

.join() является более простым в использовании и более ограниченным, чем merge(). Вы можете использовать .join() только для объединения данных по одному общему столбцу или индексу.

Как использовать .join()

Как и merge(), .join() может быть вызван на одном наборе данных и принимает другой набор данных в качестве аргумента. Вот как это может выглядеть:

result = df1.join(df2, on='key_column')

В приведенном выше примере df1 и df2 - это два набора данных, которые вы хотите объединить, а 'key_column' - это столбец, по которому вы хотите объединить данные. Результат объединения будет сохранен в переменной result.

Примеры

Предположим, у вас есть два набора данных - orders и customers. orders содержит информацию о заказах, а customers содержит информацию о клиентах. Оба набора данных имеют столбец customer_id, который можно использовать для объединения данных. Вот как вы можете объединить эти наборы данных с помощью метода .join():

result = orders.join(customers, on='customer_id')

В результате, вы получите новый набор данных result, который содержит все строки из orders и соответствующие строки из customers, объединенные по столбцу customer_id.

pandas concat(): объединение данных по строкам или столбцам

Третий метод, который вы можете использовать для объединения данных в pandas, это concat(). Вы можете использовать concat() для объединения DataFrame по строкам или столбцам.

Когда вы объединяете данные с помощью concat(), вы просто объединяете два или более DataFrame вместе. При этом данные будут просто добавлены друг к другу посредством списка или кортежа в качестве аргумента.

Как использовать concat()

Вызовите concat() на модуле pandas и передайте два или более DataFrame, которые вы хотите объединить, в виде списка или кортежа. Вот как это может выглядеть:

result = pd.concat([df1, df2])

В приведенном выше примере df1 и df2 - это два DataFrame, которые вы хотите объединить. Результат объединения будет сохранен в переменную result.

По умолчанию, concat() объединяет данные по строкам, но вы также можете указать параметр axis, чтобы объединить данные по столбцам. Например:

result = pd.concat([df1, df2], axis=1)

Здесь axis=1 указывает, что вы хотите объединить данные по столбцам df1 и df2.

Примеры

Предположим, у вас есть два набора данных - df1 и df2. df1 содержит информацию о студентах, а df2 содержит информацию о их оценках. Вы можете объединить эти наборы данных по строкам с помощью метода concat():

result = pd.concat([df1, df2])

В результате получится новый набор данных result, содержащий все строки из df1 и df2.

Заключение

В этом руководстве вы узнали, как объединять данные в pandas с помощью методов merge(), .join() и concat(). Каждый из этих методов имеет свои особенности и может быть полезен в разных ситуациях. Ознакомьтесь с документацией pandas, чтобы узнать больше о разных возможностях и параметрах этих методов.

При объединении данных в pandas помните, что подходящий метод зависит от специфики ваших данных и требований вашего анализа. Также обратите внимание на формат и структуру входных данных, чтобы избежать ошибок при объединении.

Благодаря методам merge(), .join() и concat() вы сможете эффективно работать с данными в pandas и получать более понятные и полезные результаты анализа.