Unisci i DataFrame di Pandas sull'indice
-
Usa
merge()
per combinare due Pandas DataFrame sull’indice -
Usa
join()
per combinare due Pandas DataFrame sull’indice
Nel mondo della scienza dei dati e dell’apprendimento automatico, è essenziale essere fluenti nelle operazioni di organizzazione, manutenzione e pulizia dei dati per ulteriori analisi. L’unione di due DataFrame è un esempio di una di queste operazioni. Si scopre che è facile combinare due DataFrame utilizzando la libreria Pandas in Python.
Pandas ci fornisce due utili funzioni, merge()
e join()
per combinare due DataFrame. Entrambi questi metodi sono molto simili ma merge()
è considerato più versatile e flessibile. Fornisce inoltre molti parametri per modificare il comportamento del DataFrame finale. join()
combina i due DataFrame sui loro indici, mentre merge()
ci permette di specificare le colonne che possono fungere da chiave per unire due DataFrame.
Un parametro comune di entrambe queste funzioni su cui si dovrebbe avere familiarità è come
, che definisce il tipo di join. Di default il parametro how
è inner
per merge()
e left
per join()
, ma per entrambi può essere cambiato in left
, right
, inner
e outer
. È essenziale conoscere la differenza tra tutti loro.
Combinando due Pandas DataFrame, assumiamo che uno sia il DataFrame sinistro e l’altro il DataFrame destro. Sia merge()
che join()
corrispondono ai record delle colonne chiave. Il join interno
restituisce un DataFrame di record che corrispondono in entrambi i DataFrame. Il join esterno
produce un DataFrame unito con tutti gli elementi in entrambi i DataFrame, riempiendo NaN per i valori mancanti su entrambi i lati. Il join left
contiene tutti gli elementi del DataFrame sinistro ma solo i record corrispondenti del DataFrame destro. L’opposto di left
è right
, che contiene tutti gli elementi del DataFrame destro e solo i record corrispondenti del DataFrame sinistro. Tutto questo sarà più chiaro nel codice di esempio nelle prossime sezioni in cui combineremo i DataFrame nel codice seguente:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
print(df1)
print(df2)
Produzione:
C1
1 a
2 b
4 d
5 e
7 h
C2
1 AA
2 BB
3 CC
5 EE
6 FF
Usa merge()
per combinare due Pandas DataFrame sull’indice
Quando si uniscono due DataFrame sull’indice, il valore dei parametri left_index
e right_index
della funzione merge()
dovrebbe essere True
. Il seguente esempio di codice combinerà due DataFrame con inner
come tipo di join:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_inner = df1.merge(df2, how="inner", left_index=True, right_index=True)
print(df_inner)
Produzione:
C1 C2
1 a AA
2 b BB
5 e EE
Il codice seguente unirà i DataFrames con il tipo di join come outer
:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.merge(df2, how="outer", left_index=True, right_index=True)
print(df_outer)
Produzione:
C1 C2
1 a AA
2 b BB
3 NaN CC
4 d NaN
5 e EE
6 NaN FF
7 h NaN
Come puoi vedere, il DataFrame unito con tipo di join come inner
ha solo record corrispondenti da entrambi i DataFrame, mentre quello con join outer
ha tutti gli elementi presenti in essi, riempiendo i record mancanti con NaN
. Ora utilizzando la partecipazione a left
:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_left = df1.merge(df2, how="left", left_index=True, right_index=True)
print(df_left)
Produzione:
C1 C2
1 a AA
2 b BB
4 d NaN
5 e EE
7 h NaN
Il DataFrame unito sopra ha tutti gli elementi dal DataFrame sinistro e solo i record corrispondenti dal DataFrame destro. Il suo esatto opposto è il join right
, come mostrato di seguito:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_right = df1.merge(df2, how="right", left_index=True, right_index=True)
print(df_right)
Produzione:
C1 C2
1 a AA
2 b BB
3 NaN CC
5 e EE
6 NaN FF
Usa join()
per combinare due Pandas DataFrame sull’indice
Il metodo join()
combina i due DataFrame in base ai loro indici e, per impostazione predefinita, il tipo di join è left
. Utilizza sempre l’indice del DataFrame destro, ma possiamo menzionare la chiave per il DataFrame sinistro. Possiamo specificare i tipi di join per la funzione join()
come abbiamo menzionato per merge()
.
Il seguente esempio mostra DataFrame unito con tipo di join outer
:
import pandas as pd
import numpy as np
df1 = pd.DataFrame(["a", "b", "d", "e", "h"], index=[1, 2, 4, 5, 7], columns=["C1"])
df2 = pd.DataFrame(
["AA", "BB", "CC", "EE", "FF"], index=[1, 2, 3, 5, 6], columns=["C2"]
)
df_outer = df1.join(df2, how="outer")
print(df_outer)
Produzione:
C1 C2
1 a AA
2 b BB
3 NaN CC
4 d NaN
5 e EE
6 NaN FF
7 h NaN
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedInArticolo correlato - Pandas DataFrame
- Come ottenere le intestazioni delle colonne DataFrame Pandas come lista
- Come cancellare la colonna DataFrame Pandas DataFrame
- Come convertire la colonna DataFrame in data e ora in pandas
- Converti un Float in un Integer in Pandas DataFrame
- Ordina Pandas DataFrame in base ai valori di una colonna
- Ottieni l'aggregato di Pandas Group-By e Sum