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.