Pandas merge() – злиття двох об’єктів DataFrame

Pandas merge() – злиття двох об’єктів DataFrame

Вступ

У світі аналізу даних Pandas є незамінним інструментом для обробки та маніпулювання табличними даними. Однією з найпоширеніших операцій, які ми виконуємо з даними, є злиття (merge) різних наборів даних. Pandas пропонує потужну функцію merge(), яка дозволяє об’єднати два або більше DataFrame за спільними стовпцями.

Злиття даних у Pandas дозволяє нам створити новий DataFrame, який містить інформацію з обох вихідних DataFrame. Це особливо корисно, коли ми маємо різні набори даних, які містять пов’язану інформацію, але яка розповсюджена по різним таблицям. Наприклад, у нас може бути один DataFrame з інформацією про продажі, а інший – з інформацією про клієнтів. Злиття цих DataFrame дозволить нам отримати повну картину про кожен продаж і відповідного клієнта.

Розуміння merge()

Функція merge() у Pandas дозволяє нам з’єднати два DataFrame за спільними стовпцями. Цей процес аналогічний з’єднанню таблиць у реляційних базах даних (SQL).

Ключові параметри merge():

* left: Лівий DataFrame.
* right: Правий DataFrame.
* on: Ім’я спільного стовпця, за яким проводиться злиття.
* left_on: Ім’я стовпця з лівого DataFrame, який використовується для злиття.
* right_on: Ім’я стовпця з правого DataFrame, який використовується для злиття.
* how: Тип злиття (внутрішнє, зовнішнє, ліве, праве).

Типи злиття

Функція merge() у Pandas підтримує чотири різні типи злиття, які визначають, як об’єднуються дані з двох DataFrame:

* Внутрішнє злиття (inner): Вибирає лише ті рядки, які мають відповідності в обох DataFrame за спільними стовпцями.
* Зовнішнє злиття (outer): Вибирає всі рядки з обох DataFrame, включаючи ті, які не мають відповідностей.
* Ліве зовнішнє злиття (left): Вибирає всі рядки з лівого DataFrame, а також відповідні рядки з правого DataFrame. Рядки з правого DataFrame, які не мають відповідностей, будуть заповнені NaN значеннями.
* Праве зовнішнє злиття (right): Вибирає всі рядки з правого DataFrame, а також відповідні рядки з лівого DataFrame. Рядки з лівого DataFrame, які не мають відповідностей, будуть заповнені NaN значеннями.

Приклади використання merge()

Приклад 1: Внутрішнє злиття

python
import pandas as pd

Створення двох DataFrame

sales = pd.DataFrame({'order_id': [1, 2, 3, 4],
'product': ['A', 'B', 'C', 'D'],
'quantity': [10, 5, 8, 12]})

customers = pd.DataFrame({'customer_id': [1, 2, 3, 5],
'name': ['John', 'Jane', 'Peter', 'Mary'],
'city': ['New York', 'London', 'Paris', 'Tokyo']})

Злиття DataFrame за спільним стовпцем 'customer_id'

merged_df = pd.merge(sales, customers, left_on='order_id', right_on='customer_id', how='inner')

Виведення злитого DataFrame

print(merged_df)

Результат:


order_id product quantity customer_id name city
0 1 A 10 1 John New York
1 2 B 5 2 Jane London
2 3 C 8 3 Peter Paris

Приклад 2: Зовнішнє злиття

python

Злиття DataFrame за спільним стовпцем 'customer_id' з використанням зовнішнього злиття

merged_df = pd.merge(sales, customers, left_on='order_id', right_on='customer_id', how='outer')

Виведення злитого DataFrame

print(merged_df)

Результат:


order_id product quantity customer_id name city
0 1 A 10.0 1.0 John New York
1 2 B 5.0 2.0 Jane London
2 3 C 8.0 3.0 Peter Paris
3 4 D 12.0 NaN NaN NaN
4 NaN NaN NaN 5.0 Mary Tokyo

Приклад 3: Ліве зовнішнє злиття

python

Злиття DataFrame за спільним стовпцем 'customer_id' з використанням лівого зовнішнього злиття

merged_df = pd.merge(sales, customers, left_on='order_id', right_on='customer_id', how='left')

Виведення злитого DataFrame

print(merged_df)

Результат:


order_id product quantity customer_id name city
0 1 A 10 1.0 John New York
1 2 B 5 2.0 Jane London
2 3 C 8 3.0 Peter Paris
3 4 D 12 NaN NaN NaN

Приклад 4: Праве зовнішнє злиття

python

Злиття DataFrame за спільним стовпцем 'customer_id' з використанням правого зовнішнього злиття

merged_df = pd.merge(sales, customers, left_on='order_id', right_on='customer_id', how='right')

Виведення злитого DataFrame

print(merged_df)

Результат:


order_id product quantity customer_id name city
0 1.0 A 10.0 1.0 John New York
1 2.0 B 5.0 2.0 Jane London
2 3.0 C 8.0 3.0 Peter Paris
3 NaN NaN NaN 5.0 Mary Tokyo

Висновок

Функція merge() в Pandas є потужним інструментом для об’єднання різних DataFrame за спільними стовпцями. Вона дозволяє нам створити повний і детальний набір даних, об’єднавши інформацію з різних джерел. Зрозуміння різних типів злиття та їхньої ефективності є ключовим для ефективного об’єднання даних.

Часті питання (FAQ)

1. Що станеться, якщо в DataFrame немає спільних стовпців?
У цьому випадку функція merge() не зможе з’єднати DataFrame. Вам слід перевірити, чи існують спільні стовпці, або додати стовпці, які дозволять з’єднати DataFrame.
2. Як я можу об’єднати DataFrame за кількома стовпцями?
Ви можете використовувати параметри left_on та right_on для вказання кількох стовпців, за якими буде проводитися злиття.
3. Що таке “suffixes” у merge()?
Параметр suffixes дозволяє вам визначити суфікси, які будуть додані до імен стовпців, якщо в DataFrame є стовпці з однаковими назвами.
4. Як я можу об’єднати DataFrame з різними типами даних?
Функція merge() автоматично підбирає тип даних для злиття. Однак, якщо у вас є різні типи даних, вам може знадобитися перетворити їх до спільного типу.
5. Як я можу видалити дублікати після злиття?
Ви можете використовувати метод drop_duplicates() для видалення дублікатів з злитого DataFrame.
6. Що таке “indicator” у merge()?
Параметр indicator дозволяє вам створити новий стовпець, який вказує, з якого DataFrame була взята кожна рядок.
7. Як я можу з’єднати DataFrame за стовпцями з різними назвами?
Ви можете використовувати параметри left_on та right_on для вказання різних імен стовпців для злиття.
8. Чи може merge() об’єднати більше двох DataFrame?
Так. Ви можете використовувати функцію merge() багаторазово, щоб об’єднати більше двох DataFrame.
9. Чи є інші способи об’єднання DataFrame в Pandas?
Так, є інші способи об’єднання DataFrame, такі як concat() та join(). Вибір методу залежить від ваших потреб та структури даних.
10. Де я можу знайти додаткову інформацію про merge()?
Ви можете знайти більше інформації про merge() в документації Pandas: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

Теги: Pandas, merge(), DataFrame, злиття, об’єднання, аналіз даних, Python, SQL, inner join, outer join, left join, right join, data science, data analysis, data manipulation, data processing, data cleaning.