Zaawansowane scalanie i łączenie
pd.merge() z how, on, left_on/right_on, suffixes oraz merge_asof do łączenia danych według czasu.
Zaawansowane scalanie i łączenie to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Łączenie obiektów DataFrame
pd.merge łączy dwa obiekty DataFrame na podstawie wspólnych kluczy, dokładnie tak jak SQL JOIN. Opanowanie opcji how jest niezbędne w pracy z danymi relacyjnymi.
import pandas as pd
left = pd.DataFrame({"id": [1, 2, 3], "name": ["a", "b", "c"]})
right = pd.DataFrame({"id": [2, 3, 4], "score": [90, 80, 70]})Złączenie wewnętrzne (domyślne)
how="inner" zachowuje tylko klucze obecne w OBU ramkach danych. Jest to ustawienie domyślne.
print(pd.merge(left, right, on="id", how="inner"))
# id name score
# 0 2 b 90
# 1 3 c 80Złączenie lewostronne
how="left" zachowuje każdy wiersz z lewej ramki danych, a niedopasowane kolumny z prawej strony przyjmują wartość NaN. To najczęściej używany typ złączenia w analizie danych.
print(pd.merge(left, right, on="id", how="left"))
# id name score
# 0 1 a NaN
# 1 2 b 90.0
# 2 3 c 80.0Złączenie zewnętrzne
how="outer" zachowuje wszystkie klucze z obu stron, uzupełniając braki wartościami NaN. Używaj go, aby zobaczyć pełną sumę rekordów z obu ramek.
print(pd.merge(left, right, on="id", how="outer"))
# includes id 1 (no score) and id 4 (no name)Złączenie przy różnych nazwach kolumn
Gdy kolumny z kluczami mają różne nazwy, użyj left_on i right_on zamiast on.
r2 = right.rename(columns={"id": "user_id"})
print(pd.merge(left, r2, left_on="id", right_on="user_id"))Sufiksy dla nakładających się kolumn
Jeśli obie ramki danych mają kolumnę niebędącą kluczem o tej samej nazwie, pandas dodaje sufiksy _x i _y. Aby uzyskać czytelniejsze nazwy, zastąp je za pomocą suffixes.
a = pd.DataFrame({"id": [1], "val": [10]})
b2 = pd.DataFrame({"id": [1], "val": [99]})
print(pd.merge(a, b2, on="id", suffixes=("_old", "_new")))Kolumna indicator
indicator=True dodaje kolumnę _merge pokazującą źródło każdego wiersza: left_only, right_only lub both. Jest nieoceniona podczas kontroli złączeń.
print(pd.merge(left, right, on="id", how="outer", indicator=True))
# _merge tells you where each row came fromDiagnozowanie problemów ze złączeniami
Filtrowanie według kolumny indicator szybko ujawnia niedopasowane klucze, które często powodują ciche odrzucanie danych.
m = pd.merge(left, right, on="id", how="outer", indicator=True)
print(m[m["_merge"] != "both"]) # rows that did not matchmerge_asof w łączeniach czasowych
pd.merge_asof łączy według NAJBLIŻSZEGO klucza zamiast dokładnego dopasowania. Ta funkcja została zaprojektowana specjalnie do wyrównywania szeregów czasowych, na przykład do dopasowywania każdej transakcji do najnowszego wcześniejszego kwotowania. Obie ramki danych muszą być posortowane według klucza.
trades = pd.DataFrame({"time": [1, 3, 7], "price": [10, 11, 12]})
quotes = pd.DataFrame({"time": [0, 2, 5], "bid": [9, 10, 11]})
print(pd.merge_asof(trades, quotes, on="time"))Kierunek merge_asof
Domyślnie merge_asof wyszukuje WSTECZ (najnowszy klucz w danym momencie lub wcześniej). Należy użyć direction="forward" albo "nearest", aby zmienić regułę dopasowywania.
print(pd.merge_asof(trades, quotes, on="time", direction="nearest"))Wybór właściwego łączenia
Należy użyć inner, aby zachować tylko dopasowania, left, aby wzbogacić główną tabelę, outer, aby uzyskać pełną sumę kluczy, a merge_asof w przypadku łączeń wyrównanych czasowo (z przybliżonym kluczem).
Szybkie sprawdzenie
Proszę sprawdzić swoją wiedzę na temat łączenia danych.
Podsumowanie
Zestaw narzędzi do scalania:
how=inner / left / outer określa, które klucze zostaną zachowaneonorazleft_on/right_onsłużą do wskazywania kolumn kluczysuffixesrozróżnia nakładające się nazwyindicator=Truepozwala sprawdzić źródła wierszypd.merge_asofsłuży do łączeń czasowych według najbliższego klucza (najpierw należy posortować dane)
Często zadawane pytania
Czy lekcja „Zaawansowane scalanie i łączenie” jest bezpłatna?
Tak — pełny tekst „Zaawansowane scalanie i łączenie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Zaawansowane scalanie i łączenie”?
pd.merge() z how, on, left_on/right_on, suffixes oraz merge_asof do łączenia danych według czasu. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.
Ile czasu zajmuje lekcja „Zaawansowane scalanie i łączenie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- GroupBy i agregacja
- Tabele przestawne i tabele krzyżowe
- Zaawansowane scalanie i łączenie
- Szeregi czasowe w Pandas