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

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

Mój tydzień z nauką Excela i Pythona – projekty, powtórki i plan działania.

Obraz  StockSnap  z  Pixabay Podsumowanie tygodnia – systematyczność kluczem do sukcesu      To był intensywny tydzień – zarówno pod względem nauki, jak i pracy. Mimo wszystko najważniejsza jest systematyczność, dlatego jestem sobie wdzięczna, że nie odpuszczam, nawet gdy nie jest najłatwiej.      Udało mi się zamknąć temat kursów dotyczących Excela (oczywiście tylko tymczasowo). Osiągnęłam etap, który chcę podsumować osobistym projektem, a także poświęcić więcej czasu na swobodną pracę z poznanymi narzędziami. Teraz jest czas na utrwalanie wiedzy i rozpoczęcie nowego etapu – nauki Pythona. Nowe podejście do nauki – Excel i Python w równowadze      Zastanawiałam się, jak najlepiej zorganizować naukę, aby jednocześnie skupić się na nowym materiale (Python) i nie zapomnieć tego, czego nauczyłam się w Excelu. Ostatecznie wybrałam podejście, które łączy oba te aspekty: Skupienie się na Pythonie – rozwijanie umiejętności kodowania ...

DataCamp Python Data Associate - relacja i wskazówki dla zdających

Dlaczego zdecydowałam się na ten certyfikat? Wspominałam już wcześniej nie raz i nie dwa, jak sądzę, że przymierzam się do certyfikatu DataCamp Python Data Associate . Od dłuższego czasu często zaglądam na DataCamp i w miarę mojej eksploracji tej platformy zachciałam skorzystać także z opcji przystąpienia do certyfikatu. Żeby się sprawdzić? Żeby coś sobie udowodnić? A może poczuć się lepiej z własną wiedzą? Myślę, że wszystko po trochu popchnęło mnie do tego działania. Długo wahałam się, czy to już ten moment, kiedy chcę się "testować". Nigdy nie byłam osobą, która wyrywała się do odpowiedzi. Wolałam milczeć, ale zapytana odpowiadać na pytania poprawnie. Tak samo teraz, nienaturalnym było dla mnie robić coś takiego z własnej inicjatywy i to w formie spędzania wolnego czasu. Dla przyjemności. Jak wygląda egzamin? Certyfikat składa się z dwóch części. Pierwsza jest teoretyczna i są na nią przeznaczone 2 godziny, kolejna część - praktyczna - trwa 4 godziny (lub krócej oczywiśc...