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

Statystyka praktyczna w data science- książka [RECENZJA]

  Idąc za ciosem, postanowiłam dalej pracować nad swoim rozumieniem statystyki. W tym celu sięgnęłam po książkę „Statystyka praktyczna w data science” autorstwa Petera Bruce’a, Andrewa Bruce’a i Petera Gedecka. Czy jestem zawiedziona? Wręcz przeciwnie! 📘 Dlaczego sięgnęłam po tę książkę? Po przeczytaniu „Analityka danych” (o którym pisałam tutaj: Jak polubić statystykę? Książka „Analityk Danych”- idealna na początek! [Recenzja] ) poczułam, że czas na kolejny krok- coś bardziej konkretnego i praktycznego. Chciałam ugruntować podstawy statystyki, ale w sposób zrozumiały, nieprzytłaczający i przydatny z perspektywy osoby, która dopiero wchodzi w świat data science. 💡 Pierwsze wrażenie- bardzo pozytywne! Jestem zadowolona ze swojego wyboru z wielu powodów. Przede wszystkim – za sposób, w jaki ta książka została zaprojektowana. Różne elementy treści zostały wyróżnione: kursywą, pogrubieniem, czcionką o stałej szerokości, a nawet czcionką o stałej szerokości z kursywą . Do tego trzy ...

Certyfikat DataCamp: Python Data Associate- jak się do niego przygotowuję?

  Minęło już sporo czasu, odkąd zaczęłam uczyć się na platformie DataCamp. Większość materiałów, które przerabiałam, dotyczyła Pythona (choć trochę zahaczyłam też o inne tematy). Może się wydawać, że po tak długim czasie powinnam już być mistrzynią, ale prawda jest taka, że między dwoma intensywnymi okresami nauki minęło wystarczająco dużo czasu, żebym zaczęła się zastanawiać… czy ja w ogóle jeszcze coś pamiętam? Praktyka jest ważna - a ja trochę o tym zapomniałam. Potem przyszedł moment intensywnych powtórek, od zupełnych podstaw. Chciałam mieć pewność, że nic mi nie umknęło i że nie przeskoczyłam czegoś istotnego. To wtedy postanowiłam, że tym razem nie odpuszczę, nawet jeśli życie znowu postanowi trochę namieszać (a potrafi). Ustaliłam sobie konkretny cel, zaczęłam działać i regularnie wracać do materiału. Podsumowanie nauki Dla mnie fajnym podsumowaniem tej nauki są różnego rodzaju certyfikaty. Nie tyle dla CV, co po prostu dla siebie - żeby się podbudować i mieć poczucie, że ...

Jak polubić statystykę? Książka „Analityk Danych”- idealna na początek! [Recenzja]

  Dlaczego warto przeczytać ten wpis?      Temat projektów przekładam na kolejny wpis. Muszę się czymś podzielić. Dwa tygodnie temu zakupiłam w Empiku książkę pod tytułem „Analityk Danych” autorstwa Alexa J. Gutmana i Jordana Goldmeiera. Ta pozycja jest REWELACYJNA (pomimo, że dotyczy statystyki w data science). To moja druga książka o statystyce w życiu i muszę przyznać, że tę pierwszą biorę sobie do czytania, gdy nie mogę zasnąć. Sprawdza się doskonale. Natomiast od tej nie mogę się odkleić, co jest naprawdę dziwne, bo jest o statystyce, za którą naprawdę kiedyś nie przepadałam. Teraz jednak dochodzę do wniosku, że to nie była kwestia samej statystyki, bo daleko jej do nudy. To była kwestia sposobu przekazywania mi tych treści. Ta sama historia, co z Excelem. Co sprawia, że ta książka jest tak dobra?      Jeśli chodzi o treść książki, to pierwsze, co nasuwa mi się na myśl to jest bardzo zwięzły i zgrabny sposób składania zdań. Warto tutaj wspomni...