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

Czego nauczyłam się o sobie w trakcie przebranżowienia?

  Czego nauczyłam się o sobie w trakcie przebranżowienia? W międzyczasie przygotowań do certyfikatu postanowiłam poruszyć nieco lżejszy temat. Taki bardziej osobisty- o tym, czego nauczyłam się o sobie podczas przebranżowienia i co się zmieniło w moim podejściu do nauki odkąd zaczęłam szykować się do nowej roli. Lepsze planowanie = mniej chaosu Pierwsza rzecz, która od razu przychodzi mi do głowy, to zdecydowanie lepsze planowanie nauki . Bez planu łatwo się pogubić albo przytłoczyć ilością materiału, który trzeba ogarnąć. Dlatego zawsze robię plan- najczęściej tygodniowy. Uwzględniam w nim obsunięcia czasowe, więc w większości przypadków udaje mi się go zrealizować. Nie spieszę się za bardzo, bo zależy mi na dogłębnym poznaniu każdego tematu (na poziomie, który sobie wcześniej ustaliłam – douczanie się to i tak temat na całe życie 😉 ). Staram się łączyć różne formy nauki: teoria i praktyka na DataCampie, webinary, filmy na YouTubie, książki, projekty „do szuflady”. I co najważ...

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...

Jak efektywnie uczyć się Excela? Mój tydzień z nauką i projektem.

  Obraz  Markus Winkler  z  Pixabay Podsumowanie tygodnia – plan nauki (prawie) zrealizowany!      Ten tydzień oceniam jako niezwykle udany z perspektywy realizowania mojego planu nauki, który przedstawia łam wcześniej. Zrealizowałam prawie cały plan, nie licząc dwóch kursów ze „Skill Tracka” Data Analysis with Excel Power Tools (no, tak naprawdę zostało mi 1.5 kursu, jestem właśnie na Power Pivocie). To o wiele lepszy wynik, niż się spodziewałam. Szczególnie, że wszystko od razu sprawdzam w praktyce, upewniam się czy wiem jak zastosować, a jeśli trzeba- powtarzam. Robię też notatki- oczywiście na komputerze. Mimo, że się nie spieszyłam, bo zależało mi na solidnym opanowaniu przerabianego materiału, to mam do zaprezentowania kolejne etapy skreślone z listy zadań: Pierwszy projekt – nauka w praktyce      Projekt, który wykonałam, był próbny i realizowany razem z tutorialem. Sama idea zakończenia cyklu nauki projektem była genialna. Czuł...