Avancerad sammanfogning och join
pd.merge() med how, on, left_on/right_on, suffixes och merge_asof för tidsbaserade join-operationer.
Avancerad sammanfogning och join är en gratis lektion i Lär Er AI med Python på CoddyKit. Detta är lektion 3 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lär Er AI med Python, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.
Kombinera DataFrames
pd.merge sammanfogar två DataFrames utifrån gemensamma nycklar, precis som en SQL JOIN. Det är viktigt att behärska alternativen för how vid arbete med relationsdata.
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]})Inre join (standard)
how="inner" behåller endast nycklar som finns i BÅDA DataFrames. Det är standardalternativet.
print(pd.merge(left, right, on="id", how="inner"))
# id name score
# 0 2 b 90
# 1 3 c 80Vänsterjoin
how="left" behåller varje rad från den vänstra DataFrame:n; om matchning saknas blir kolumnerna från höger NaN. Detta är den vanligaste join-typen inom analys.
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.0Yttre join
how="outer" behåller alla nycklar från båda sidor och fyller luckor med NaN. Använd den för att se den fullständiga unionen av posterna.
print(pd.merge(left, right, on="id", how="outer"))
# includes id 1 (no score) and id 4 (no name)Joina på kolumnnamn som skiljer sig
När nyckelkolumnerna har olika namn använder Ni left_on och right_on i stället för on.
r2 = right.rename(columns={"id": "user_id"})
print(pd.merge(left, r2, left_on="id", right_on="user_id"))Suffix för överlappande kolumner
Om båda DataFrames innehåller en kolumn med samma namn som inte är en nyckel lägger pandas till _x och _y. Åsidosätt detta med suffixes för tydlighet.
a = pd.DataFrame({"id": [1], "val": [10]})
b2 = pd.DataFrame({"id": [1], "val": [99]})
print(pd.merge(a, b2, on="id", suffixes=("_old", "_new")))Indikator-kolumnen
indicator=True lägger till en kolumn med namnet _merge som visar källan för varje rad: left_only, right_only eller both. Ovärderligt när joins ska granskas.
print(pd.merge(left, right, on="id", how="outer", indicator=True))
# _merge tells you where each row came fromDiagnostisera join-problem
Genom att filtrera på indikatorn hittar Ni snabbt omatchade nycklar, en vanlig orsak till att data försvinner utan tydliga fel.
m = pd.merge(left, right, on="id", how="outer", indicator=True)
print(m[m["_merge"] != "both"]) # rows that did not matchmerge_asof för tidsbaserade join-operationer
pd.merge_asof kopplar ihop rader baserat på den NÄRMASTE nyckeln i stället för en exakt matchning. Funktionen är särskilt utformad för att synkronisera tidsserier, till exempel genom att matcha varje affär med den senast föregående kursnoteringen. Båda dataframerna måste vara sorterade efter nyckeln.
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"))Riktning för merge_asof
Som standard söker merge_asof BAKÅT (den senaste nyckeln vid eller före den aktuella). Använd direction="forward" eller "nearest" för att ändra matchningsregeln.
print(pd.merge_asof(trades, quotes, on="time", direction="nearest"))Välja rätt join
Använd inner för att endast behålla matchningar, left för att komplettera en primär tabell, outer för hela unionen och merge_asof för tidsanpassade join-operationer med ungefärliga nycklar.
Snabbkontroll
Testa era kunskaper om join-operationer.
Sammanfattning
Verktygslåda för sammanslagning:
how=inner / left / outer styr vilka nycklar som överleveronjämfört medleft_on/right_onför nyckelkolumnersuffixesskiljer överlappande namn åtindicator=Truegranskar radkällornapd.merge_asofför tidsbaserade join-operationer med närmaste nyckel (sortera först)
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 53
- Lektioner
- 225
Vanliga frågor
Är lektionen ”Avancerad sammanfogning och join” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lär Er AI med Python, inklusive ”Avancerad sammanfogning och join”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lär Er AI med Python innehåller totalt 4 lektioner.
Vad lär jag mig i ”Avancerad sammanfogning och join”?
pd.merge() med how, on, left_on/right_on, suffixes och merge_asof för tidsbaserade join-operationer. Ni övar på Lär Er AI med Python med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Lär Er AI med Python?
Du behöver inga förkunskaper. Utbildningen i Lär Er AI med Python på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Avancerad sammanfogning och join”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Lär Er AI med Python-lektionen?
Ja. Varje Lär Er AI med Python-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- GroupBy och aggregering
- Pivottabeller och korstabellulering
- Avancerad sammanfogning och join
- Tidsserier i Pandas