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


Об’єднання об’єктів DataFrame за допомогою Pandas merge()

Вступ

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

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

Огляд функціональності merge()

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

Основні параметри merge():

  • left: DataFrame, який розміщений зліва.
  • right: DataFrame, який розміщений справа.
  • on: Назва стовпця, що є спільним для обох DataFrame і слугує ключем для об’єднання.
  • left_on: Назва стовпця з лівого DataFrame, що використовуватиметься для з’єднання.
  • right_on: Назва стовпця з правого DataFrame, що використовуватиметься для з’єднання.
  • how: Визначає тип об’єднання (внутрішнє, зовнішнє, ліве, праве).

Різновиди об’єднання (merge types)

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

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

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

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


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
1 A 10 1 John New York
2 B 5 2 Jane London
3 C 8 3 Peter Paris

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


# Злиття 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
1.0 A 10.0 1.0 John New York
2.0 B 5.0 2.0 Jane London
3.0 C 8.0 3.0 Peter Paris
4.0 D 12.0 NaN NaN NaN
NaN NaN NaN 5.0 Mary Tokyo

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


# Злиття 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
1 A 10 1.0 John New York
2 B 5 2.0 Jane London
3 C 8 3.0 Peter Paris
4 D 12 NaN NaN NaN

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


# Злиття 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
1.0 A 10.0 1.0 John New York
2.0 B 5.0 2.0 Jane London
3.0 C 8.0 3.0 Peter Paris
NaN NaN NaN 5.0 Mary Tokyo

Заключення

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

Поширені питання (FAQ)

1. Що відбувається, якщо в DataFrame відсутні спільні стовпці?
У цьому разі merge() не зможе виконати об’єднання. Важливо перевіряти наявність спільних стовпців або додавати їх для успішного з’єднання.
2. Як можна об’єднати DataFrame за кількома стовпцями?
Можна використовувати параметри left_on та right_on для зазначення списку стовпців, які слугуватимуть ключами для злиття.
3. Для чого потрібен параметр “suffixes” в merge()?
Параметр suffixes дозволяє задати суфікси, що додаються до назв стовпців у разі наявності стовпців з однаковими іменами в обох DataFrame.
4. Чи можна об’єднати DataFrame з різними типами даних?
merge() автоматично визначає типи даних для об’єднання. Проте, якщо типи даних не співпадають, може знадобитися їхнє попереднє перетворення до єдиного формату.
5. Як усунути дублікати після злиття?
Після злиття можна скористатися методом drop_duplicates() для видалення рядків-дублікатів.
6. Яке призначення параметра “indicator” у merge()?
Параметр indicator дозволяє створити додатковий стовпець, який вказує, з якого DataFrame походить кожен рядок.
7. Як з’єднати DataFrame за стовпцями, які мають різні імена?
Для цього використовують параметри left_on та right_on для відповідного вказання імен стовпців для злиття.
8. Чи можна merge() об’єднати більше двох DataFrame?
Так, можна використовувати функцію merge() кілька разів, щоб послідовно об’єднати більше двох DataFrame.
9. Чи існують інші способи об’єднання DataFrame в Pandas?
Так, є методи concat() та join(). Вибір залежить від конкретних завдань і структури даних.
10. Де знайти детальну інформацію про 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.