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?
- 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.
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.
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).
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:
Łą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.
Komentarze
Prześlij komentarz