Merge e join avanzati
pd.merge() con how, on, left_on/right_on, suffixes e merge_asof per join basati sul tempo.
Merge e join avanzati è una lezione Learn AI with Python gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Learn AI with Python, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Learn AI with Python include 4 lezioni in totale.
Combinare i DataFrame
pd.merge unisce due DataFrame tramite chiavi condivise, esattamente come una JOIN SQL. Padroneggiare le opzioni di how è essenziale per lavorare con dati relazionali.
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]})Join interna (predefinita)
how="inner" conserva solo le chiavi presenti in ENTRAMBI i frame. È l'impostazione predefinita.
print(pd.merge(left, right, on="id", how="inner"))
# id name score
# 0 2 b 90
# 1 3 c 80Join a sinistra
how="left" conserva ogni riga del frame a sinistra; le colonne senza corrispondenza a destra diventano NaN. È la join più comune nell'analisi dei dati.
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.0Join esterna
how="outer" conserva tutte le chiavi di entrambi i lati, riempiendo le lacune con NaN. La utilizzi per visualizzare l'unione completa dei record.
print(pd.merge(left, right, on="id", how="outer"))
# includes id 1 (no score) and id 4 (no name)Unire colonne con nomi diversi
Quando le colonne chiave hanno nomi diversi, utilizzi left_on e right_on al posto di on.
r2 = right.rename(columns={"id": "user_id"})
print(pd.merge(left, r2, left_on="id", right_on="user_id"))Suffissi per le colonne sovrapposte
Se entrambi i frame condividono il nome di una colonna non chiave, pandas aggiunge _x e _y. Li sostituisca con suffixes per maggiore chiarezza.
a = pd.DataFrame({"id": [1], "val": [10]})
b2 = pd.DataFrame({"id": [1], "val": [99]})
print(pd.merge(a, b2, on="id", suffixes=("_old", "_new")))La colonna indicator
indicator=True aggiunge una colonna _merge che mostra l'origine di ogni riga: left_only, right_only oppure both. È indispensabile per verificare le join.
print(pd.merge(left, right, on="id", how="outer", indicator=True))
# _merge tells you where each row came fromDiagnosticare i problemi delle join
Filtrare sulla colonna indicator rivela rapidamente le chiavi senza corrispondenza, una causa comune della perdita silenziosa di dati.
m = pd.merge(left, right, on="id", how="outer", indicator=True)
print(m[m["_merge"] != "both"]) # rows that did not matchmerge_asof per unioni temporali
pd.merge_asof esegue l’unione sulla chiave PIÙ VICINA anziché su una corrispondenza esatta. È progettato appositamente per allineare serie temporali, ad esempio associando ogni operazione all’ultima quotazione precedente. Entrambi i frame devono essere ordinati in base alla chiave.
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"))Direzione di merge_asof
Per impostazione predefinita, merge_asof cerca all’INDIETRO (l’ultima chiave precedente o uguale). Utilizzi direction="forward" o "nearest" per modificare la regola di corrispondenza.
print(pd.merge_asof(trades, quotes, on="time", direction="nearest"))Scelta del join corretto
Utilizzi inner per mantenere solo le corrispondenze, left per arricchire una tabella principale, outer per ottenere l’unione completa e merge_asof per i join allineati temporalmente (con chiavi approssimate).
Verifica rapida
Verifichi le Sue conoscenze sui join.
Riepilogo
Strumenti per il merging:
how=inner / left / outer controlla quali chiavi sopravvivonoonrispetto aleft_on/right_onper le colonne chiavesuffixesdisambigua i nomi sovrappostiindicator=Trueverifica l’origine delle righepd.merge_asofper join temporali sulla chiave più vicina (ordini prima i dati)
Domande Frequenti
La lezione «Merge e join avanzati» è gratuita?
Sì — il testo completo di «Merge e join avanzati» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Learn AI with Python, passa a CoddyKit PRO. Il corso Learn AI with Python include 4 lezioni in totale.
Cosa imparerò in «Merge e join avanzati»?
pd.merge() con how, on, left_on/right_on, suffixes e merge_asof per join basati sul tempo. Eserciti Learn AI with Python con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Learn AI with Python?
Non è richiesta alcuna esperienza precedente. Learn AI with Python su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Merge e join avanzati»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Learn AI with Python?
Sì. Ogni lezione Learn AI with Python include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- GroupBy e aggregazione
- Tabelle pivot e tabelle di contingenza
- Merge e join avanzati
- Serie temporali in Pandas