Przejdź do głównej zawartości

Jak łączyć dane w pandas - merge, join i concat krok po kroku

 


Wprowadzenie: po co łączyć dane w pandas?

DataFrame to potężna struktura danych zarówno do eksplorowania jak i analizowania danych. Często zdarza się, że zachodzi konieczność połączenia danych pochodzących z różnych datasetów w jedną całość. Aby ten wpis był dla Ciebie przydatny, musisz mieć już jakieś doświadczenie w pracy z DataFrame'ami, choć nie musi być ono na zaawansowanym poziomie. Wystarczy, że mniej więcej ogarniasz Pythona i stawiałeś już pierwsze kroki w prostych pracach na datasetach. Wtedy, po jakimś czasie zwykle pojawia się konieczność zastosowania różnego typu złączeń, by móc przeprowadzić pełną analizę. 

Czego dowiesz się z tego wpisu? 

  • Poznasz metody, które umożliwiają różnego typu złączenia.
  • Zobaczysz czym różnią się od siebie typy złączeń i w jakich sytuacjach stosujemy poszczególne z nich.

Choć z całą pewnością nie wyczerpię tematu, to treść tego wpisu powinna stanowić solidną podstawę, żeby poczuć się pewnie z operacją łączenia danych przy pomocy biblioteki pandas, a tym samym zyskać kompletne dane do dalszej pracy nad nimi.


Jakimi metodami można łączyć DataFrame'y w pandas?

Są trzy metody, które nam to umożliwiają:
  • merge()
  • join()
  • concat()

Wybór odpowiedniej metody będzie zależał w dużej mierze od problemu, który przyjdzie nam rozwiązać. Różnią się one możliwościami zastosowania, jak i konfiguracji procesu łączenia danych.


Łączenie danych za pomocą merge()

Jest to metoda, która umożliwia połączenie obiektów typu DataFrame za pomocą kluczy, czyli kolumn (jednej lub wielu) które występują w obu złączanych obiektach. Złączenie to można kontrolować stosując odpowiednie argumenty definiujące parametry przeprowadzanego złączenia. Często słowo merge stosowane jest zamiennie ze słowem join i oznacza to po prostu połączenie DataFrame'ów. Należy jednak pamiętać, że same metody merge() i join() nie są zupełnie tożsame- sposób łączenia będzie nieco inny. 


Najważniejsze parametry merge():

  • how- parametr używany do zdefiniowania typu złączenia (np. left), default = inner
  • on- służy do zdefiniowania kolumn, po których ma nastąpić łączenie
  • suffixes- do określenia sufiksów, które mają być dodawane do kolumn o takich samych nazwach w obu tabelach

Scenariusz 1

Mamy dwie tabele: tabela 1 oraz tabela 2. Zawierają one wspólną kolumnę. Chcielibyśmy połączyć je tak, żeby każdy wiersz z tabeli 1 miał dołączone do siebie informacje z tabeli 2. Oznacza to, że zwrócone mają być części wspólne z obu tabel przy użyciu naszej kolumny-klucza. W tym przypadku zastosujemy metodę merge() typu INNER JOIN.

Wizualnie można przedstawić ten rodzaj łączenia jako zwrócenie części wspólnej:







Domyślnie nadawane są sufiksy x i y ale jest to parametr, który możemy sami określić - będzie dla nas wtedy jaśniejszy do zrozumienia. W tym celu ustawiamy parametr suffixes na odpowiadające nam oznaczenia w postaci str


Scenariusz 2 - LEFT JOIN

Mamy dwie tabele: tabela 1 oraz tabela 2. Zawierają one wspólną kolumnę. Chcielibyśmy połączyć je tak, żeby każdy wiersz z tabeli 1 miał dołączone do siebie informacje z tabeli 2. Zależy nam jednak na tym, by nasz wynik złączenia zawierał wszystkie rekordy z DataFrame'u po lewej stronie złączenia, czyli tabeli 1.


Różnica w kodzie jest niewielka- jedynie ustawiamy parametr how równy "left".


RIGHT JOIN

Analogicznie do sytuacji ze scenariusza 2, moglibyśmy chcieć, aby nasza końcowa ramka danych zawierała wszystkie wiersze z tabeli po prawej stronie (tabela 2) i tylko te pasujące z tabeli lewej (tabela 1). 


I znów, tylko drobna modyfikacja w kodzie aby uzyskać ten typ złączenia:


SCENARIUSZ 3

Mamy dwa datasety. Oba zawierają informacje, których potrzebujemy do analizy. Chcielibyśmy je połączyć tak, by zachować wszystkie informacje z obu datasetów. Wtedy przychodzi z pomocą OUTER JOIN. Co się tylko da zostanie dopasowane, a rekordy, których nie da się dopasować zostaną uzupełnione wartościami NaN. Ostatecznie posiadamy pełen komplet informacji z obu datasetów- z tabeli 1 oraz tabeli 2.









Łączenie danych z użyciem join()

Przejdźmy do join(). W przypadku tej metody łączenie odbywa się na podstawie kolumny indeksowej albo indeksów. Można w ten sposób wygodnie dołączyć kolumny pochodzące z innego DataFrame'u bez określania kolumny stanowiącej klucz. Domyślnie połączenie wykonywane jest po indeksie i to w zasadzie jest główne zastosowanie tego typu złączenia.

SCENARIUSZ 4

Mamy dwa datasety. Oba posiadają te np. te same indeksy, lecz różnią się kolumnami. Stosując w tej sytuacji join() możemy wzbogacić DataFrame_1 o kolumny z DataFrame_2 na podstawie indeksów pisząc prosty kod jak poniżej:




Choć join() domyślnie działa po indeksach, można również wskazać konkretną kolumnę jako klucz za pomocą argumentu "on".
Zaprezentowany przykład to najprostszy z możliwych. Opcji jest znacznie więcej (argumenty "how" lub "on"). W myśl zasady, że douczać można (i powinno!) się zawsze prezentuję tutaj naprawdę najważniejsze informacje. Te obowiązkowe dla wszystkich zaineresowanych.

Łączenie danych z użyciem concat()

Ostatni rodzaj: concat() można wyobrazić sobie jako dosłowne "sklejenie" DataFrame'ów poziomo lub pionowo. Domyślne jest "sklejenie" pionowe (czyli wzdłuż osi 0). Jest to metoda prosta w użyciu, która nie wymaga wskazywania kluczy złączenia. 



Podsumowanie



Komentarze

Popularne posty z tego bloga

10+ najczęstszych błędów w analizie danych (i jak ich uniknąć przed certyfikatem DataCamp)

  Gdy życie krzyżuje plany  (i co z tego wynika) Jestem na etapie kończenia zaplanowanych powtórek. Wszystko idzie trochę wolniej, niż zakładałam, bo życie (ech, znowu ono) pokrzyżowało mi plany. Mam teraz coś znacznie ważniejszego, z czym muszę się zmierzyć, niż jakikolwiek certyfikat. W tym krótkim poście chciałabym pochylić się nad częstymi błędami, które zdarzają się osobom przygotowującym się do certyfikatu, do którego ja też podchodzę. Pisałam o nim tutaj →  Certyfikat DataCamp: Python Data Associate- jak się do niego przygotowuję? . Skąd wzięłam te błędy? Najpierw przedstawię błędy wymieniane przez autorów materiałów na DataCampie. Potem przejdę przez takie, które często pojawiają się w innych źródłach (np. tu: laboratorium-mozliwosci.pl , dataconversion.ie ). Później dorzucę coś od siebie - czyli błędy, które sama popełniłam. A na koniec to, co podpowiedział mi jeszcze ChatGPT (jako uzupełnienie listy). Z mojej perspektywy - osoby, która przygotowuje się do egza...

Excel od podstaw – jak skutecznie się go nauczyć? Mój sposób.

Obraz  Mango Matter  z  Pixabay Zaczynam od Excela     Zgodnie z wynikami analizy z poprzedniego wpisu, moja nauka zaczyna się od Excela.  Plan nauki zakładał pierwotnie opanowanie tego programu w takim stopniu żeby móc w nim swobodnie pracować. Tylko, że to stwierdzenie nic tak naprawdę nie znaczy.  Dlatego w tym poście staram się trochę usystematyzować, co uważam za znajomość Excela na poziomie zerowym, podstawowym, średnim i zaawansowanym. W tej całej nauce, którą tak planuję nie chcę dać się przytłoczyć mnogością materiałów. Nie chcę dać się ponieść perfekcjonizmowi. Postaram się mieć na uwadze, że nawet, jeśli wiemy dużo, to nie wszystko. Tak też będzie ze mną i Excelem. I to jest zupełnie ok.  Mój plan nauki      Postanowiłam wypunktować umiejętności, które można nabyć, a w miarę nauki zobaczę, ile z tej listy tak naprawdę powinnam zrealizować i na którym etapie poczuję się pewniej z tym programem. Jako, że uwielbiam cał...

SQL w 2 godziny dziennie - plan, motywacja, materiały

  Przyszedł czas na ustalenie nowych celów. Mój wybór padł na powtórki i rozszerzanie wiedzy z SQL. Opracowałam już prosty plan, którego zamierzam się trzymać, rozplanowałam sobie jaką część tego planu zamierzam wykonać w poszczególne dni. Jestem podekscytowana. Jak zawsze, gdy zaczynam coś nowego.  Małe sprostowanie: SQL nie jest dla mnie ZUPEŁNIE nowy, uczyłam się go już kiedyś, ale to było dawno i mam potrzebę go odświeżyć.  Dlaczego akurat SQL? Bo to narzędzie, które mimo upływu lat nie traci na aktualności. W świecie danych SQL wciąż jest podstawą  - niezależnie od tego, czy pracujesz w analizie danych, nauce o danych, czy w IT szerzej. Ja sama coraz częściej trafiam na sytuacje, w których jego znajomość bardzo by mi się przydała - przy analizie wyników, raportach, czy integracji danych z różnych źródeł. Poza tym lubię jego logiczność i strukturę - jest coś satysfakcjonującego w dobrze napisanym zapytaniu, które robi dokładnie to, co powinno. Czuję, że warto poś...