Pandas merge() – Scalanie dwóch obiektów DataFrame

W dziedzinie analizy danych, integracja informacji z różnych zbiorów danych jest nieodzowna. Biblioteka Pandas, fundamentalne narzędzie do obróbki danych w Pythonie, oferuje wszechstronną funkcję merge(), która umożliwia sprawne łączenie obiektów DataFrame.

Koncepcja scalania DataFrame

Proces scalania obiektów DataFrame polega na połączeniu ich w oparciu o wspólne kolumny, co skutkuje utworzeniem nowego DataFrame zawierającego dane z obu pierwotnych struktur. Jest to szczególnie użyteczne w sytuacjach takich jak:

  • Wypełnianie niekompletnych danych w jednym DataFrame, korzystając z informacji z drugiego.
  • Agregacja danych z różnych tabel w bazie danych.
  • Konsolidacja danych pochodzących z wielu plików CSV.

Funkcja merge() w Pandas oferuje elastyczne podejście do scalania, umożliwiając konfigurację typu łączenia, kolumn wykorzystywanych jako klucze oraz warunków, które muszą zostać spełnione.

Scalanie na podstawie kluczy

Najprostsza forma scalania wykorzystuje wspólne kolumny jako klucze identyfikujące. Składnia jest następująca:

DataFrame1.merge(DataFrame2, on=['klucz'])

Parametr on wskazuje kolumny, które służą do łączenia obiektów DataFrame. Na przykład, aby połączyć ramki danych o nazwach sprzedaz i produkty, używając kolumny id_produktu, kod będzie wyglądać tak:

sprzedaz.merge(produkty, on='id_produktu')

Rodzaje scalania

Funkcja merge() obsługuje różnorodne strategie scalania, które definiują, w jaki sposób wiersze z łączonych obiektów DataFrame będą ze sobą zestawiane:

  • Scalanie wewnętrzne (inner): Zwraca jedynie wiersze, które posiadają dopasowania w obu obiektach DataFrame.
  • Scalanie zewnętrzne lewe (left): Zwraca wszystkie wiersze z lewego DataFrame, włączając te, które nie mają odpowiedników w prawym.
  • Scalanie zewnętrzne prawe (right): Zwraca wszystkie wiersze z prawego DataFrame, włączając te, które nie mają odpowiedników w lewym.
  • Scalanie zewnętrzne pełne (outer): Zwraca wszystkie wiersze z obu obiektów DataFrame, niezależnie od istnienia dopasowań.

Typ scalania wybiera się za pomocą parametru how.

Warunki scalania

Oprócz kluczy, można określić dodatkowe warunki, które muszą zostać spełnione, aby wiersze zostały połączone. Struktura składni jest następująca:

DataFrame1.merge(DataFrame2, on=['klucz'], how='inner', on_conditions=['warunek'])

Parametr on_conditions przyjmuje listę warunków logicznych, które precyzują, które wiersze mają być połączone. Na przykład, aby scalić wiersze, w których sprzedaz.cena jest wyższa niż produkty.cena_katalogowa, użyjemy kodu:

sprzedaz.merge(produkty, on='id_produktu', how='inner', on_conditions=['sprzedaz.cena > produkty.cena_katalogowa'])

Przykłady praktyczne

Przykład 1: Scalanie wewnętrzne

Scalanie wewnętrzne zwraca tylko wiersze, które mają pasujące klucze w obu DataFrame. W przykładzie poniżej łączymy dane sprzedaz i produkty w oparciu o kolumnę id_produktu:


import pandas as pd

sprzedaz = pd.DataFrame({
'id_produktu': [1, 2, 3, 4, 5],
'cena': [10, 20, 30, 40, 50],
'ilosc': [100, 200, 300, 400, 500]
})

produkty = pd.DataFrame({
'id_produktu': [1, 3, 4, 6, 7],
'nazwa': ['A', 'B', 'C', 'D', 'E']
})

wynik = sprzedaz.merge(produkty, on='id_produktu')

print(wynik)

Rezultat:


id_produktu cena ilosc nazwa

0 1 10 100 A

1 3 30 300 B

2 4 40 400 C

Przykład 2: Scalanie zewnętrzne lewe

Scalanie zewnętrzne lewe uwzględnia wszystkie wiersze z lewego obiektu DataFrame, nawet jeśli brakuje dla nich dopasowań w prawym. W prezentowanym przykładzie łączymy sprzedaz i produkty na podstawie id_produktu, stosując typ scalania left:


wynik = sprzedaz.merge(produkty, on='id_produktu', how='left')

print(wynik)

Rezultat:


id_produktu cena ilosc nazwa

0 1 10 100 A

1 2 20 200 NaN

2 3 30 300 B

3 4 40 400 C

4 5 50 500 NaN

Praktyczne zastosowania funkcji merge()

Funkcja merge() jest wszechstronnym narzędziem do łączenia danych z różnych źródeł. Typowe zastosowania obejmują:

  • Łączenie danych z wielu plików CSV.
  • Scalanie danych z relacyjnych baz danych.
  • Porównywanie danych z różnych przedziałów czasowych.
  • Rozszerzanie danych o dodatkowe informacje.

Podsumowanie

Funkcja merge() w Pandas to potężny mechanizm do łączenia obiektów DataFrame na podstawie wspólnych kolumn. Elastyczność w doborze typu scalania, warunków oraz obsługa kluczy złożonych czyni ją uniwersalnym narzędziem do integracji danych z wielu źródeł. Zrozumienie i biegłe posługiwanie się funkcją merge() jest kluczowe dla efektywnej manipulacji danymi w Pythonie.

Najczęściej zadawane pytania (FAQ)

1. Na czym polega scalanie obiektów DataFrame?
Scalanie obiektów DataFrame to łączenie ich w oparciu o wspólne kolumny, w wyniku czego powstaje nowy DataFrame zawierający dane z obu pierwotnych zbiorów.

2. Jakie typy scalania wspiera funkcja merge()?
Funkcja merge() oferuje cztery typy scalania: wewnętrzne, zewnętrzne lewe, zewnętrzne prawe i zewnętrzne pełne.

3. Jak definiować warunki, które muszą być spełnione, aby doszło do połączenia wierszy?
Warunki można określić za pomocą parametru on_conditions, który przyjmuje listę warunków logicznych określających, które wiersze mają zostać połączone.

4. Co się dzieje, gdy w obu obiektach DataFrame brak pasujących kluczy?
W zależności od wybranego typu scalania, wiersze z brakującymi kluczami mogą zostać pominięte lub uzupełnione wartościami NaN.

5. Czy istnieje możliwość użycia więcej niż jednej kolumny jako klucza?
Tak, można użyć wielu kolumn jako kluczy, przekazując je jako listę do parametru on.

6. Jak radzić sobie z wartościami null w kolumnie klucza?
Wartości null w kluczu scalającym mogą prowadzić do nieoczekiwanych rezultatów. Rozwiązaniem może być zastosowanie metody dropna() przed scalaniem, aby usunąć wiersze zawierające wartości null.

7. Czy funkcja merge() pozwala na łączenie danych z różnych formatów plików?
Owszem, funkcja merge() umożliwia łączenie ramek danych utworzonych z różnych formatów plików, takich jak CSV, JSON czy Excel.

8. Jak poprawić wydajność funkcji merge()?
Aby zwiększyć efektywność funkcji merge(), warto rozważyć użycie indeksów w obiektach DataFrame oraz dopasować typ scalania do konkretnych potrzeb.

9. Czy istnieją alternatywy dla funkcji merge()?
Tak, w Pandas dostępne są inne funkcje do scalania, takie jak concat() i join(). Jednak merge() jest często uważana za najbardziej wszechstronną i elastyczną opcję.

10. Gdzie można znaleźć więcej informacji o funkcji merge()?
Więcej szczegółów znajduje się w dokumentacji Pandas: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.merge.html


newsblog.pl